volley.parsererror:org.json.JSONException:java.lang.string类型的值br无法转换为JSONObject

时间:2018-05-27 21:38:28

标签: java php android android-studio

volley.parsererror:org.json

  

java.lang.string类型的值br无法转换为JSONObject

Android代码

public void performSearch() {
            String url= "http://192.168.0.136/fyp/stitle.php";
            RequestQueue requestQueue = Volley.newRequestQueue(Stitle.this);
           JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,url,null,
                   new Response.Listener<JSONObject>() {
               @Override
               public void onResponse(JSONObject response) {
                   Log.i("Response", response.toString());
                   try {
                       //converting the string to json array object
                       JSONObject array = new JSONObject();
                       Log.i("test", " value : " + array.getString("status"));
                       if (array.getString("status").equals("true")) {
                           JSONArray jsonArray = array.getJSONArray("search");
                           Log.i("test", " value : " + array);

                           for (int i = 0; i < jsonArray.length(); i++) {

                               //getting product object from json array
                               JSONObject product = jsonArray.getJSONObject(i);

                               //adding the product to product list
                               boolean add = productList.add(new list(
                                       product.getLong("isbn"),
                                       product.getString("title"),
                                       product.getString("authors"),
                                       product.getInt("accession"),
                                       product.getString("publisher"),
                                       product.getInt("pubyear"),
                                       product.getInt("pages"),
                                       product.getInt("rak"),
                                       product.getInt("hr"),
                                       product.getInt("vr"),
                                       product.getLong("barcode")

                               ));

                           }

                       } else {
                           Log.i("test", "else error");

                       }


                   } catch (JSONException e) {
                       e.printStackTrace();
                       Log.i("test", e.toString());
                   }
               }

           }, new Response.ErrorListener() {
               @Override
               public void onErrorResponse(VolleyError error) {
                   Toast.makeText(getApplicationContext(), "error:" + error.toString(), Toast.LENGTH_LONG).show();

               }
           }) {
               @Override
               protected Map<String, String> getParams() throws AuthFailureError {

                   Map<String, String> params = new HashMap<>();
                   params.put("Title", searchtitle.getText().toString());

                   return params;
               }
           };
           requestQueue = Volley.newRequestQueue(Stitle.this);
           requestQueue.add(jsObjRequest);

        }

        }
  

将json发送到android java文件的PHP代码文件

    <?php
include"connection.php";

   if (isset($title = $_POST["Title"]){

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$query =$conn->prepare('SELECT isbn, title, authors, accession, publisher, pubyear, pages, rak, hr, vr, barcode FROM books where title like "%'.$title.'%" ');

$query->execute();

$query->bind_result($isbn, $title, $authors, $accession, $publisher, $pubyear, $pages, $rak, $hr, $vr, $barcode);


$books = array(); 
$data =array();
//traversing through all the result 
    while($query->fetch()){
    $temp = array();
    $temp['isbn'] = $isbn; 
    $temp['title'] = $title; 
    $temp['authors'] = $authors; 
    $temp['accession'] = $accession; 
    $temp['publisher'] = $publisher; 
    $temp['pubyear'] = $pubyear; 
    $temp['pages'] = $pages; 
    $temp['rak'] = $rak; 
    $temp['hr'] = $hr; 
    $temp['vr'] = $vr; 
    $temp['barcode'] = $barcode;

    array_push($data, $temp);

    }
    $books['status'] = true;
    $books['search'] = $data;



    //displaying the result in json format 
    echo json_encode($books);
}}
?>
  

在屏幕上运行应用此错误吐司[volley.parsererror:org.json.JSONException:java.lang.string类型的值br无法转换为JSONArray]

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。首先让我们来处理你的PHP。您的PHP代码应该被设计为返回一些有用的信息,无论它是成功还是失败 - 以及它失败的原因。

我无法确定您使用哪个类来访问MySQL数据,但无论如何它都不是PDO。我将使用PDO向您展示一个示例,因为您可以使用预准备语句,这将有助于保护您免受SQL注入攻击。 您的PHP代码设计很差,除此之外,它还可以进行SQL注入攻击!

通过isset检查参数来开始PHP代码。无论您的查询是否失败,此代码都将返回JSONObject。这样可以更容易地看出出现问题 - 何时出错。

<?php

// array for JSON response
$response = array();
//set values just in case any thing goes wrong
$response["status"] = 0;
$response["message"] = "Error before start";

// check for post data with isset
if (isset($_POST["Title"])) {

    $title = $_POST["Title"];

    // You were not using PDO so I dumped your connection and require you to provide...
    //...a configuration file for ...
    require_once __DIR__ . '/db_config.php';
    // ...these  variables
    $host = DB_SERVER;
    $db   = DB_DATABASE;
    $user = DB_USER;
    $pass = DB_PASSWORD;
    $charset = 'utf8';

    $dsn = "mysql:host=$host;dbname=$db;charset=$charset";
    $opt = [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ];

    try{
        // connecting to db with PDO
        $pdo = new PDO($dsn, $user, $pass, $opt);


        $sql = 'SELECT isbn, title, authors, accession, publisher, pubyear, pages, rak, hr, vr, barcode
                FROM books 
                WHERE title LIKE :titleParam';

        $titleParam = "%".$title."%";

        $stmt = $pdo->prepare($sql);

        // Bind the parameter
        $stmt->bindParam(':titleParam', $titleParam, PDO::PARAM_STR);

        $res = $stmt->execute();

        if ($res) {
            // success
            $response["status"] = 1;
            // connection node
            $response["books"] = array();

            while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                $data = array();
                $data["isbn"] = $row["isbn"];
                $data["title"] = $row["title"];
                $data["authors"] = $row["authors"];
                $data["accession"] = $row["accession"];
                $data["publisher"] = $row["publisher"];
                $data["pubyear"] = $row["pubyear"];
                $data["pages"] = $row["pages"];
                $data["rak"] = $row["rak"];
                $data["hr"] = $row["hr"];
                $data["vr"] = $row["vr"];
                $data["barcode"] = $row["barcode"];

                array_push($response["books"], $data);
            }
        }
        else {
            // required field is missing
            $response["status"] = 2;
            $response["message"] = "No data returned";
        }   
    }
    catch (Exception $e){
        $response["status"] = 3;
        $response["message"] = "Error occurred." . $e->getMessage();
    }
}
else {
    $response["status"] = 4;
    $response["message"] = "Post parameters are not correct";
}
// echoing JSON response
echo json_encode($response);
?>