Android解析数据org.json.JSONException时出错:Value<;br>&书信电报;无法将java.lang.String类型的表转换为JSONObject

Android解析数据org.json.JSONException时出错:Value<;br>&书信电报;无法将java.lang.String类型的表转换为JSONObject,java,php,android,json,Java,Php,Android,Json,我试图根据ListView中按下的项目显示信息。单击列表视图中的项目时,将显示主题信息 但是我遇到了一个问题,当在列表视图中单击项目时,它无法显示基于我单击的项目的主题信息,并且在logcat中显示错误 Logcat Json响应显示成功获取主题信息单个产品详细信息,但仍然无法显示主题信息。谢谢 05-14 17:54:36.671: D/All Products:(1227): {"success":1,"products":[{"session":"2-2014\/2015","subjec

我试图根据ListView中按下的项目显示信息。单击列表视图中的项目时,将显示主题信息

但是我遇到了一个问题,当在列表视图中单击项目时,它无法显示基于我单击的项目的主题信息,并且在logcat中显示错误

Logcat Json响应显示成功获取主题信息单个产品详细信息,但仍然无法显示主题信息。谢谢

05-14 17:54:36.671: D/All Products:(1227): {"success":1,"products":[{"session":"2-2014\/2015","subject_code":"BITS 3323 Local Area Network","section":"1\/1","class_ID":"1"},{"session":"2-2014\/2015","subject_code":"BITS 3323 Local Area Network","section":"1\/2","class_ID":"2"},{"session":"2-2014\/2015","subject_code":"BITS 3323","section":"1\/2","class_ID":"8"},{"session":"2-2014\/2015","subject_code":"BITS2323 Wide Area Network","section":"1\/1","class_ID":"9"}]}
05-14 17:54:37.731: E/JSON Parser(1227): Error parsing data org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
05-14 17:54:37.731: D/Single Product Details(1227): {"success":1,"products":[{"session":"2-2014\/2015","subject_code":"BITS 3323 Local Area Network","section":"1\/1","class_ID":"1"},{"session":"2-2014\/2015","subject_code":"BITS 3323 Local Area Network","section":"1\/2","class_ID":"2"},{"session":"2-2014\/2015","subject_code":"BITS 3323","section":"1\/2","class_ID":"8"},{"session":"2-2014\/2015","subject_code":"BITS2323 Wide Area Network","section":"1\/1","class_ID":"9"}]}
05-14 17:54:37.731: D/JSON Parser(1227): {"success":1,"products":[{"session":"2-2014\/2015","subject_code":"BITS 3323 Local Area Network","section":"1\/1","class_ID":"1"},{"session":"2-2014\/2015","subject_code":"BITS 3323 Local Area Network","section":"1\/2","class_ID":"2"},{"session":"2-2014\/2015","subject_code":"BITS 3323","section":"1\/2","class_ID":"8"},{"session":"2-2014\/2015","subject_code":"BITS2323 Wide Area Network","section":"1\/1","class_ID":"9"}]}
 05-14 17:54:37.731: W/System.err(1227): org.json.JSONException: No value for product
公共类EditProductActivity2 公共类EditProductActivity2扩展活动{

EditText txtName;
EditText txtPrice;
EditText txtDesc;
EditText txtCreatedAt;
Button btnSave;
Button btnDelete;

String class_ID;
String subject_code;
String session;
String section;

// Progress Dialog
private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();


// single product url
private static final String url_class_detials = "http://192.168.1.14/android/get_class_details.php";

// url to update product
private static final String url_update_product = "http://10.0.2.2/android_connect/update_product.php";

// url to delete product
private static final String url_delete_product = "http://10.0.2.2/android_connect/delete_product.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCT = "product";
private static final String TAG_PID = "class_ID";
private static final String TAG_NAME = "subject_code";
private static final String TAG_PRICE = "session";
private static final String TAG_DESCRIPTION = "section";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_product);

    // save button
    btnSave = (Button) findViewById(R.id.btnSave);
    btnDelete = (Button) findViewById(R.id.btnDelete);

    // getting product details from intent
    Intent i = getIntent();

    // getting product id (pid) from intent
    class_ID = i.getStringExtra(TAG_PID);

    // Getting complete product details in background thread
    new GetProductDetails().execute();

    // save button click event
    btnSave.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // starting background task to update product
            new SaveProductDetails().execute();
        }
    });

    // Delete button click event
    btnDelete.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // deleting product in background thread
            new DeleteProduct().execute();
        }
    });

}

/**
 * Background Async Task to Get complete product details
 * */
class GetProductDetails extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(EditProductActivity2.this);
        pDialog.setMessage("Loading product details. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Getting product details in background thread
     * */
    protected String doInBackground(String... params) {

        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                // Check for success tag
                int success;
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("pid", class_ID));

                    // getting product details by making HTTP request
                    // Note that product details url will use GET request
                    JSONObject json = jsonParser.makeHttpRequest(
                            url_class_detials, "GET", params);

                    // check your log for json response
                    Log.d("Single Product Details", json.toString());



                    // json success tag
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        // successfully received product details
                        Log.d("JSON Parser",json.toString() );

                        JSONArray productObj = json
                                .getJSONArray(TAG_PRODUCT); // JSON Array



                        // get first product object from JSON Array
                        JSONObject product = productObj.getJSONObject(0);

                        // product with this pid found
                        // Edit Text
                        txtName = (EditText) findViewById(R.id.inputName);
                        txtPrice = (EditText) findViewById(R.id.inputPrice);
                        txtDesc = (EditText) findViewById(R.id.inputDesc);

                        // display product data in EditText
                        txtName.setText(product.getString(TAG_NAME));
                        txtPrice.setText(product.getString(TAG_PRICE));
                        txtDesc.setText(product.getString(TAG_DESCRIPTION));

                    }else{
                        // product with pid not found
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        return null;
    }


    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once got all details
        pDialog.dismiss();
    }
}

/**
 * Background Async Task to  Save product Details
 * */
class SaveProductDetails extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(EditProductActivity2.this);
        pDialog.setMessage("Saving product ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Saving product
     * */
    protected String doInBackground(String... args) {

        // getting updated data from EditTexts
        subject_code = txtName.getText().toString();
        session = txtPrice.getText().toString();
        section = txtDesc.getText().toString();

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair(TAG_PID, class_ID));
        params.add(new BasicNameValuePair(TAG_NAME, subject_code ));
        params.add(new BasicNameValuePair(TAG_PRICE, session ));
        params.add(new BasicNameValuePair(TAG_DESCRIPTION, section  ));

        // sending modified data through http request
        // Notice that update product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_update_product,
                "POST", params);

        // check json success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // successfully updated
                Intent i = getIntent();
                // send result code 100 to notify about product update
                setResult(100, i);
                finish();
            } else {
                // failed to update product
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }


    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once product uupdated
        pDialog.dismiss();
    }
}

/*****************************************************************
 * Background Async Task to Delete Product
 * */
class DeleteProduct extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(EditProductActivity2.this);
        pDialog.setMessage("Deleting Product...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Deleting product
     * */
    protected String doInBackground(String... args) {

        // Check for success tag
        int success;
        try {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("pid", class_ID));

            // getting product details by making HTTP request
            JSONObject json = jsonParser.makeHttpRequest(
                    url_delete_product, "POST", params);

            // check your log for json response
            Log.d("Delete Product", json.toString());

            // json success tag
            success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                // product successfully deleted
                // notify previous activity by sending code 100
                Intent i = getIntent();
                // send result code 100 to notify about product deletion
                setResult(100, i);
                finish();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once product deleted
        pDialog.dismiss();

    }

}
}

当php代码不正确时,php代码中出现错误。您将得到一个描述错误的html表。。类似于
。这意味着我的php文件gt出错?但在尝试此php文件时,它不会在jsonParser.java add log.i(“result”,result)中显示任何错误;//将结果更改为您所拥有的..可能是json..或者我不知道在发布整个日志之后会发生什么
EditText txtName;
EditText txtPrice;
EditText txtDesc;
EditText txtCreatedAt;
Button btnSave;
Button btnDelete;

String class_ID;
String subject_code;
String session;
String section;

// Progress Dialog
private ProgressDialog pDialog;

// JSON parser class
JSONParser jsonParser = new JSONParser();


// single product url
private static final String url_class_detials = "http://192.168.1.14/android/get_class_details.php";

// url to update product
private static final String url_update_product = "http://10.0.2.2/android_connect/update_product.php";

// url to delete product
private static final String url_delete_product = "http://10.0.2.2/android_connect/delete_product.php";

// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_PRODUCT = "product";
private static final String TAG_PID = "class_ID";
private static final String TAG_NAME = "subject_code";
private static final String TAG_PRICE = "session";
private static final String TAG_DESCRIPTION = "section";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.edit_product);

    // save button
    btnSave = (Button) findViewById(R.id.btnSave);
    btnDelete = (Button) findViewById(R.id.btnDelete);

    // getting product details from intent
    Intent i = getIntent();

    // getting product id (pid) from intent
    class_ID = i.getStringExtra(TAG_PID);

    // Getting complete product details in background thread
    new GetProductDetails().execute();

    // save button click event
    btnSave.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // starting background task to update product
            new SaveProductDetails().execute();
        }
    });

    // Delete button click event
    btnDelete.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // deleting product in background thread
            new DeleteProduct().execute();
        }
    });

}

/**
 * Background Async Task to Get complete product details
 * */
class GetProductDetails extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(EditProductActivity2.this);
        pDialog.setMessage("Loading product details. Please wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Getting product details in background thread
     * */
    protected String doInBackground(String... params) {

        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                // Check for success tag
                int success;
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("pid", class_ID));

                    // getting product details by making HTTP request
                    // Note that product details url will use GET request
                    JSONObject json = jsonParser.makeHttpRequest(
                            url_class_detials, "GET", params);

                    // check your log for json response
                    Log.d("Single Product Details", json.toString());



                    // json success tag
                    success = json.getInt(TAG_SUCCESS);
                    if (success == 1) {
                        // successfully received product details
                        Log.d("JSON Parser",json.toString() );

                        JSONArray productObj = json
                                .getJSONArray(TAG_PRODUCT); // JSON Array



                        // get first product object from JSON Array
                        JSONObject product = productObj.getJSONObject(0);

                        // product with this pid found
                        // Edit Text
                        txtName = (EditText) findViewById(R.id.inputName);
                        txtPrice = (EditText) findViewById(R.id.inputPrice);
                        txtDesc = (EditText) findViewById(R.id.inputDesc);

                        // display product data in EditText
                        txtName.setText(product.getString(TAG_NAME));
                        txtPrice.setText(product.getString(TAG_PRICE));
                        txtDesc.setText(product.getString(TAG_DESCRIPTION));

                    }else{
                        // product with pid not found
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

        return null;
    }


    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once got all details
        pDialog.dismiss();
    }
}

/**
 * Background Async Task to  Save product Details
 * */
class SaveProductDetails extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(EditProductActivity2.this);
        pDialog.setMessage("Saving product ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Saving product
     * */
    protected String doInBackground(String... args) {

        // getting updated data from EditTexts
        subject_code = txtName.getText().toString();
        session = txtPrice.getText().toString();
        section = txtDesc.getText().toString();

        // Building Parameters
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair(TAG_PID, class_ID));
        params.add(new BasicNameValuePair(TAG_NAME, subject_code ));
        params.add(new BasicNameValuePair(TAG_PRICE, session ));
        params.add(new BasicNameValuePair(TAG_DESCRIPTION, section  ));

        // sending modified data through http request
        // Notice that update product url accepts POST method
        JSONObject json = jsonParser.makeHttpRequest(url_update_product,
                "POST", params);

        // check json success tag
        try {
            int success = json.getInt(TAG_SUCCESS);

            if (success == 1) {
                // successfully updated
                Intent i = getIntent();
                // send result code 100 to notify about product update
                setResult(100, i);
                finish();
            } else {
                // failed to update product
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }


    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once product uupdated
        pDialog.dismiss();
    }
}

/*****************************************************************
 * Background Async Task to Delete Product
 * */
class DeleteProduct extends AsyncTask<String, String, String> {

    /**
     * Before starting background thread Show Progress Dialog
     * */
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(EditProductActivity2.this);
        pDialog.setMessage("Deleting Product...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }

    /**
     * Deleting product
     * */
    protected String doInBackground(String... args) {

        // Check for success tag
        int success;
        try {
            // Building Parameters
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("pid", class_ID));

            // getting product details by making HTTP request
            JSONObject json = jsonParser.makeHttpRequest(
                    url_delete_product, "POST", params);

            // check your log for json response
            Log.d("Delete Product", json.toString());

            // json success tag
            success = json.getInt(TAG_SUCCESS);
            if (success == 1) {
                // product successfully deleted
                // notify previous activity by sending code 100
                Intent i = getIntent();
                // send result code 100 to notify about product deletion
                setResult(100, i);
                finish();
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * After completing background task Dismiss the progress dialog
     * **/
    protected void onPostExecute(String file_url) {
        // dismiss the dialog once product deleted
        pDialog.dismiss();

    }

}
}
$response = array();



require_once __DIR__ . '/db_connect.php';
//require_once 'db_connect.php';

// connecting to db
 $db = new DB_CONNECT();

// check for post data
if (isset($_GET["pid"])) {
$pid = $_GET['pid'];

// get a product from products table
$result = mysql_query("SELECT *FROM class WHERE class_ID=$pid ");

if (!empty($result)) {
    // check for empty result
    if (mysql_num_rows($result) > 0) {

        $result = mysql_fetch_array($result);

        $product = array();
         $product["class_ID"] = $row["class_ID"];
         $product["subject_code"] = $row["subject_code"];
         $product["session"] = $row["session"];
         $product["section"] = $row["section"];
        // success
        $response["success"] = 1;

        // user node
        $response["product"] = array();

        array_push($response["product"], $product);

        // echoing JSON response
        echo json_encode($response);
    } else {
        // no product found
        $response["success"] = 0;
        $response["message"] = "No product found";

        // echo no users JSON
        echo json_encode($response);
    }
} else {
    // no product found
    $response["success"] = 0;
    $response["message"] = "No product found";

    // echo no users JSON
    echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";

// echoing JSON response
echo json_encode($response);
}
?>