2013-03-24 133 views
0

我获得以下错误:JSONArray不能被转换为JSONObject的

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

这里是Android和PHP代码,我有:

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代码:

$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); 

什么时我做错了?

+0

参见:http://stackoverflow.com/questions/12142238/add-jsonarray-to-jsonobject – Arvind 2013-03-24 17:47:19

+0

PLZ添加字符串,你得到的回应有问题的服务器获得更多的帮助 – 2013-03-24 18:13:14

+0

@ beyaz,你找到了解决你的问题? – Shade 2013-03-30 22:59:10

回答

0

记录您的回复。如果它以“[”开头并以“]”结尾,则必须将其存储在类型为“JSONArray”的变量中。注意您的日志,您的回复必须是“JSONArray”,所以只需将您的响应保存在“JSONArray”类型的变量中即可。

+0

我没弄清楚。我在发出HttpRequest时出错。如何在请求时执行“JSONArray”类型的变量? – Beyaz 2013-03-24 17:54:00

+0

@Beyaz请参阅我的编辑。 – hasanghaforian 2013-03-24 17:59:12

1

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

改变这一行:

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

...这样的:

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

所以我必须为JsonArray实现我的JsonParser? Cuz,Jsonparser返回Json对象 – Beyaz 2013-03-24 18:04:09

+1

基本上,是的。我不知道你使用哪个解析器。如果您自己实现它,那么您必须修改它以将JSON解析为数组。如果你正在使用某个库,那么它可能有办法做到这一点 - 只需阅读文档。 – Shade 2013-03-24 18:10:11

相关问题