无法使用java和php从数据库加载详细信息
我已经开发了一个Android应用程序,其中包括一个写备忘录的功能。 用户单击查看备忘录后,会出现一个备忘录名称列表。用户可以单击特定备忘录以编辑形式显示详细信息。 我已经使用浏览器测试了php代码,它返回了正确的备忘录细节。 但不幸的是,在用户点击所选备忘录后,应用程序已经停止工作 以下是java代码:无法使用java和php从数据库加载详细信息,java,php,android,Java,Php,Android,我已经开发了一个Android应用程序,其中包括一个写备忘录的功能。 用户单击查看备忘录后,会出现一个备忘录名称列表。用户可以单击特定备忘录以编辑形式显示详细信息。 我已经使用浏览器测试了php代码,它返回了正确的备忘录细节。 但不幸的是,在用户点击所选备忘录后,应用程序已经停止工作 以下是java代码: public class EditMemoActivity extends Activity { EditText editMemoName; EditText editMemoDetail
public class EditMemoActivity extends Activity {
EditText editMemoName;
EditText editMemoDetails;
Button btnSaveMemo;
Button btnDeleteMemo;
String pid;
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
static String URL = new ServerURL().getURL();
private static final String url_memo_details = URL+"database/get_memo_details.php";
private static final String url_update_memo = URL+"database/update_memo.php";
private static final String url_delete_memo = URL + "database/delete_memo.php";
private static final String TAG_SUCCESS = "success";
private static final String TAG_MEMO = "memo";
private static final String TAG_PID = "pid";
private static final String TAG_MEMO_NAME = "memo_name";
private static final String TAG_MEMO_DETAILS = "memo_details";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_memo);
btnSaveMemo = (Button) findViewById(R.id.btnSaveMemo);
btnDeleteMemo = (Button) findViewById(R.id.btnDeleteMemo);
Intent i = getIntent();
pid = i.getStringExtra(TAG_PID);
new GetMemoDetails().execute();
btnSaveMemo.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
new SaveMemoDetails().execute();
}
});
btnDeleteMemo.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
new DeleteMemo().execute();
}
});
}
class GetMemoDetails extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditMemoActivity.this);
pDialog.setMessage("Loading memo details. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
protected String doInBackground(String... params) {
runOnUiThread(new Runnable() {
public void run() {
int success;
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));
JSONObject json = jsonParser.makeHttpRequest(
url_memo_details, "GET", params);
Log.d("Single Memo Details", json.toString());
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
JSONArray memoObj = json
.getJSONArray(TAG_MEMO); // JSON Array
JSONObject memo = memoObj.getJSONObject(0);
;
editMemoName = (EditText) findViewById(R.id.editTextEditMemoName);
editMemoDetails = (EditText) findViewById(R.id.editTextEditMemoDetails);
editMemoName.setText(memo.getString(TAG_MEMO_NAME));
editMemoDetails.setText(memo.getString(TAG_MEMO_DETAILS));
}else{
// memo with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
protected void onPostExecute(String file_url) {
pDialog.dismiss();
}
}
}
以下是php代码:
<?php
// array for JSON response
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
// check for post data
if (isset($_GET["pid"])) {
$pid = $_GET['pid'];
$result = mysql_query("SELECT *FROM memo WHERE pid = $pid");
if (!empty($result)) {
// check for empty result
if (mysql_num_rows($result) > 0) {
$result = mysql_fetch_array($result);
$memo = array();
$memo["pid"] = $result["pid"];
$memo["memo_name"] = $result["memo_name"];
$memo["memo_details"] = $result["memo_details"];
// success
$response["success"] = 1;
// user node
$response["memo"] = array();
array_push($response["memo"], $memo);
// echoing JSON response
echo json_encode($response);
} else {
$response["success"] = 0;
$response["message"] = "No memo found";
// echo no users JSON
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "No memo found";
// echo no users JSON
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
从
doInBackground
中删除rununuithread(new Runnable(){public void run(){}
,将更新UI代码移动到onPostExecute(列表结果)
class GetMemoDetails扩展了异步任务{
@凌驾
受保护列表doInBackground(字符串…arg0){
//TODO自动生成的方法存根
成功;
列表=新的ArrayList();
试一试{
List params=new ArrayList();
参数添加(新的BasicNameValuePair(“pid”,pid));
JSONObject json=jsonParser.makeHttpRequest(
url_备忘录_详细信息,“获取”,参数);
Log.d(“单个备忘录详细信息”,json.toString());
success=json.getInt(TAG_success);
如果(成功==1){
JSONArray memoObj=json
.getJSONArray(TAG_MEMO);//JSON数组
JSONObject memo=memobj.getJSONObject(0);
;
editMemoName=(EditText)findViewById(R.id.editTextEditMemoName);
editMemoDetails=(EditText)findViewById(R.id.editTextEditMemoDetails);
list.add(memo.getString(TAG_memo_NAME));
list.add(memo.getString(TAG_memo_DETAILS));
}否则{
//找不到带有pid的备忘录
}
}捕获(JSONException e){
e、 printStackTrace();
}
退货清单;
}
@凌驾
受保护的void onPostExecute(列表结果){
editMemoName.setText(result.get(0));
editMemoDetails.setText(result.get(1));
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
pDialog=新建进度对话框(EditMemoActivity.this);
pDialog.setMessage(“正在加载备忘录详细信息。请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(真);
pDialog.show();
}
}
这与phpmyadmin有什么关系?phpmyadmin只是可用于管理db@Dagon我只是想让大家知道我正在使用phpmyadmin来处理我的数据库。我将从标记中删除它,谢谢。您遇到的错误与前面的问题相同:NetworkOnMainThredException。使用runOnUiThread with它内部的网络调用阻止了异步任务的使用。请看:hi@MorrisonChang我已将代码移动到onProgressUpdate(String…params)
,但是List params=new ArrayList();
不允许我使用“params”,我必须重命名它。因此显示的文本框是空的。。图形将切断Java stacktrace最重要的部分。
<?php
// array for JSON response
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
// check for post data
if (isset($_GET["pid"])) {
$pid = $_GET['pid'];
$result = mysql_query("SELECT *FROM memo WHERE pid = $pid");
if (!empty($result)) {
// check for empty result
if (mysql_num_rows($result) > 0) {
$result = mysql_fetch_array($result);
$memo = array();
$memo["pid"] = $result["pid"];
$memo["memo_name"] = $result["memo_name"];
$memo["memo_details"] = $result["memo_details"];
// success
$response["success"] = 1;
// user node
$response["memo"] = array();
array_push($response["memo"], $memo);
// echoing JSON response
echo json_encode($response);
} else {
$response["success"] = 0;
$response["message"] = "No memo found";
// echo no users JSON
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "No memo found";
// echo no users JSON
echo json_encode($response);
}
} else {
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
class GetMemoDetails extends AsyncTask<String, String, List<String>> {
@Override
protected List<String> doInBackground(String... arg0) {
// TODO Auto-generated method stub
int success;
List<String> list=new ArrayList<String>();
try {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("pid", pid));
JSONObject json = jsonParser.makeHttpRequest(
url_memo_details, "GET", params);
Log.d("Single Memo Details", json.toString());
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
JSONArray memoObj = json
.getJSONArray(TAG_MEMO); // JSON Array
JSONObject memo = memoObj.getJSONObject(0);
;
editMemoName = (EditText) findViewById(R.id.editTextEditMemoName);
editMemoDetails = (EditText) findViewById(R.id.editTextEditMemoDetails);
list.add(memo.getString(TAG_MEMO_NAME));
list.add(memo.getString(TAG_MEMO_DETAILS));
}else{
// memo with pid not found
}
} catch (JSONException e) {
e.printStackTrace();
}
return list;
}
@Override
protected void onPostExecute(List<String> result) {
editMemoName.setText(result.get(0));
editMemoDetails.setText(result.get(1));
}
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(EditMemoActivity.this);
pDialog.setMessage("Loading memo details. Please wait...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
}