2014-10-31 70 views
0

我試圖使用AsyncHttpClient API訪問來自php的數據數組。當我試圖獲得我的例外數據時:org.json.JSONException:成功時的值爲0的java.lang.String不能轉換爲JSONArray

org.json.JSONException: Value 0 at success of type java.lang.String cannot be converted to JSONArray 

我不確定這裏有什麼問題。

如果$ response [「success」] = 1,那麼我想做一些事情,如果不是,我想烤一個值,我試圖訪問成功價值。

這裏是我的PHP文件:

<?php 

include("config.php"); 
$response = array(); 
if (isset($_GET['userID'])) 
{ 

    $userID = $_GET['userID']; 

// mysql inserting a new row 
$result = //MY QUERY GOES HERE 

// check for empty result 
if (mysql_num_rows($result) > 0) 
{ 
$response["data"] = array(); 

while ($row = mysql_fetch_array($result)) 
{ 
    // temp user array 
    $detail = array(); 
    $detail["userID"] = $row["username"]; 
    $detail["password"] = $row["password"]; 

    array_push($response["data"], $detail); 
} 
// success 
$response["success"] = 1; 

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

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

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

而且我的Android代碼:

AsyncHttpClient client = new AsyncHttpClient(); 
    client.get(uploadWebsite, requestParams, new JsonHttpResponseHandler() 
    { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
     { 

      try 
      { 
       JSONArray sucessdetails = response.getJSONArray("success"); 
       for (int i = 0; i < sucessdetails.length(); i++) 
       { 
        JSONObject successObject = sucessdetails.getJSONObject(i); 

        Log.e("Value","Of success"+successObject); 
       } 
      } 
      catch (JSONException e) 
      { 
       Log.e("ERROR","E"+e); 
       e.printStackTrace(); 
      } 
     } 
     }); 

有人可以幫我解決這個問題,我一直在努力的最後1天。 SO似乎有類似的問題,但不是確切的問題。

謝謝!

+0

嘗試記錄JSON響應並在此處進行更新。看着JSON,你會知道你在做什麼是錯的。帶有標籤'「success」'的元素不是JSON數組 – codePG 2014-10-31 07:45:25

+0

您期待的是JSONArray,但是您將在JSON中獲得一個字符串您是否檢查過JSON – 2014-10-31 07:45:31

+0

@PramodYadav:$ response [data]的結果是如果我只是改變response.getJSONArray(「success」); to response.getJSONArray(「data」);怎麼樣? – TheDevMan 2014-10-31 07:50:34

回答

1

看起來像你的意思是這樣:

if (response.getInt("success") == 1) { 
    JSONArray sucessdetails = response.getJSONArray("data");  

    for (int i = 0; i < sucessdetails.length(); i++) { 
     JSONObject successObject = sucessdetails.getJSONObject(i); 

     Log.e("Value","Of success"+successObject); 
    } 
} else { 
    Log.e("Status", "Failed"); 
} 

但一般情況下,最好以表示成功和失敗使用HTTP狀態代碼不是通過添加字段到您的JSON對象。

+0

謝謝。得到它了。我的錯。將查看HTTP狀態代碼。 – TheDevMan 2014-10-31 08:08:16

1
@Override 
public void onSuccess(int statusCode, Header[] headers, JSONObject response) 
{ 
    try { 
     // Checking for STATUS tag 
     int success = response.getInt("success"); 
     Log.d("test", success); 

     // extract all the data in the user JSON Array 
     if (success == 1) { 
      JSONArray sucessdetails = response.getJSONArray("data"); 
      for (int i = 0; i < sucessdetails.length(); i++) 
      { 
       JSONObject successObject = sucessdetails.getJSONObject(i); 

       Log.e("Value","Of success"+successObject); 
      } 
     } else { 
      //You can use a toast here to indicate the failure status from server 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

它總是很好,如果你可以記錄你的反應,因此你可以看到如何JSON的樣子。這使您可以更輕鬆地從JSON中提取數據。

+0

非常感謝。我弄清楚了什麼是錯誤。 – TheDevMan 2014-10-31 08:09:04

+0

它對你有幫助。快樂編碼:) – codePG 2014-10-31 08:09:35

相關問題