2013-03-24 6 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

+0

плз добавьте строку, которую вы получаете в ответ от сервера с вопросом, чтобы получить дополнительную помощь –

+0

@beyaz, вы нашли решение своей проблемы? – Shade

ответ

0

Запишите свой ответ. Если он начинается с «[» и заканчивается на «]», вы должны сохранить его в переменной типа «JSONArray». С учетом вашего журнала ваш ответ должен быть «JSONArray», поэтому просто сохраните свой ответ в переменной типа «JSONArray».

+0

Я не понял этого. У меня возникла ошибка, когда я делаю HttpRequest. Как я могу сделать переменную типа «JSONArray» при запросе? – Beyaz

+0

@Beyaz, пожалуйста, ознакомьтесь с моими изменениями. – hasanghaforian

1

Веб-сервис, который вы используете, возвращает JSONArray. Вы должны использовать объект типа JSONArray для его хранения. Вы не можете использовать JSONObject.

Изменить эту строку:

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

... к этому:

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

, так что я должен реализовать свой JsonParser для JsonArray? Cuz, Jsonparser return Json Object – Beyaz

+1

В принципе, да. Я не знаю, какой парсер вы используете. Если вы внедрили его самостоятельно, тогда вам нужно изменить его, чтобы проанализировать JSON как массив. Если вы используете какую-то библиотеку, то, вероятно, есть способ сделать это - просто прочитайте документы. – Shade

Смежные вопросы