无法使用java和php从数据库加载详细信息

无法使用java和php从数据库加载详细信息,java,php,android,Java,Php,Android,我已经开发了一个Android应用程序,其中包括一个写备忘录的功能。 用户单击查看备忘录后,会出现一个备忘录名称列表。用户可以单击特定备忘录以编辑形式显示详细信息。 我已经使用浏览器测试了php代码,它返回了正确的备忘录细节。 但不幸的是,在用户点击所选备忘录后,应用程序已经停止工作 以下是java代码: public class EditMemoActivity extends Activity { EditText editMemoName; EditText editMemoDetail

我已经开发了一个Android应用程序,其中包括一个写备忘录的功能。 用户单击查看备忘录后,会出现一个备忘录名称列表。用户可以单击特定备忘录以编辑形式显示详细信息。 我已经使用浏览器测试了php代码,它返回了正确的备忘录细节。 但不幸的是,在用户点击所选备忘录后,应用程序已经停止工作

以下是java代码:

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();
        }
}