关于php:JSONArray无法转换为JSONObject

JSONArray cannot be converted to JSONObject

我收到以下错误:

1
Error parsing data org.json.JSONException: Value [] of type org.json.JSONArray cannot be converted to JSONObject

这是我拥有的 Android 和 PHP 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void eventUpdatePoint(String eventStatus,int lat,int lon){

    JSONParser jsonParserEUP = new JSONParser();
        try
        {  
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("longtitude", Integer.toString(lon)));
            params.add(new BasicNameValuePair("latitude", Integer.toString(lat)));
            params.add(new BasicNameValuePair("eventstatus", eventStatus));
            String url_updatePoint ="http://10.0.2.2/android_connect/event_update_point.php";
            JSONObject json = jsonParserEUP.makeHttpRequest(url_updatePoint,"POST", params);
            Log.d("Response", json.toString());
        }
        catch(Exception e)
        {
            e.printStackTrace();
            Log.d("ERROR:","ERROR:"    + e.getClass().getName() +":" + e.getMessage());
        }
    }

php 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
$response = array(); if (isset($_POST['longtitude']) && isset($_POST['latitude']) &&isset($_POST['eventstatus'])) {
    $longtitude = $_POST['longtitude'];
    $latitude = $_POST['latitude'];
    $eventstatus = $_POST['eventstatus'];

    $e_id=0;
    $score=0;


    require_once __DIR__ . '/db_connect.php';

    $db = new DB_CONNECT();

    $result = mysql_query("SELECT id FROM cordinates WHERE longtitude=$longtitude AND latitude=$latitude") or die(mysql_error());
    while ($row = mysql_fetch_array($result)) {

            $e_id = $row["id"];  
        }
    $result = mysql_query("SELECT score FROM point WHERE e_id=$e_id") or die(mysql_error());

    if (mysql_num_rows($result) > 0) {

        while ($row = mysql_fetch_array($result)) {

            $score = $row["score"];  
        }
        if($eventstatus=="inc")
        {  
            $score+=10;
            $result = mysql_query("UPDATE point SET score=$score where e_id=$e_id") or die(mysql_error());  
            $response["success"] = 1;
             $response["message"] ="Score point increased";
        }
        else if($eventstatus=="dec")
        {  
            $score-=10;
            $result = mysql_query("UPDATE point SET score=$score where e_id=$e_id") or die(mysql_error());
            $response["success"] = 0;
             $response["message"] ="Score point decreased";
        }
    }
    echo json_encode($response);

我做错了什么?


您正在使用的网络服务返回一个 JSONArray。您必须使用 JSONArray 类型的对象来存储它。您不能使用 JSONObject。

改变这一行:

1
JSONObject json = jsonParserEUP.makeHttpRequest(url_updatePoint,"POST", params);

...到这个:

1
JSONArray json = jsonParserEUP.makeHttpRequest(url_updatePoint,"POST", params);


记录您的回复。如果它以"["开头并以"]"结尾,您必须将其存储在"JSONArray"类型的变量中。注意您的日志,您的回复必须是一个 "JSONArray",因此只需将您的响应保存在 "JSONArray" 类型的变量中。