2013-12-14 69 views
2

我試圖使用Volley來使用Web服務。這是我的logcat輸出:無法使用Volley將JSONArray轉換爲JSONObject

十月12日至14日:45:41.750:I/Annuaire2error(4005):org.json.JSONException:值[{ 「標籤」:[{ 「pers_nom」: 「日元」 「pers_id」: 「1」, 「pers_prenom」: 「分級表」, 「pers_email」: 「[email protected]」, 「pers_phone」: 「443456784」},{ 「pers_nom」: 「憫」,」 pers_id「:」2「,」pers_prenom「:」Derkok「,」pers_email「:」[email protected]「,」pers_phone「:」2345512398「}]}]類型org.json.JSONArray無法轉換到JSONObject

它似乎無法訪問我的Web服務的值label。我怎樣才能從JSONArray轉換爲JSONObject

這是我的代碼:

mRequestQueue = Volley.newRequestQueue(getActivity().getApplicationContext()); 

JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET,url,null,new Response.Listener<JSONObject>() { 
    @Override 
    public void onResponse(JSONObject response) { 
     Log.i(TAG,response.toString()); 
     try{ 
      JSONObject value = response.getJSONObject("label"); 
      String essai = value.getString("pers_nom"); 
      /** 
      * just for check 
      * */ 
      Toast.makeText(getActivity(), ""+essai, Toast.LENGTH_SHORT).show(); 
      Log.d("volley output", essai); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
},new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Toast.makeText(getActivity(), "errrrroooor", Toast.LENGTH_LONG).show(); 
     Log.i(TAG+"error",error.getMessage()); 
    } 
}); 

mRequestQueue.add(jr); 
+0

請按照下面的示例使用齊射:http://www.javacodegeeks.com/2013/06/android-volley-library-example.html – Dev

回答

3

,你得到的迴應是JSONArray不是一個JSONObject

public void onResponse(JSONObject response)// resposne should be JSONArray 
// Change it to JSONArray 

JSONObject value = response.getJSONObject("label"); // wrong 
// label is a json array 

您的JSON

[ // json array node 
    { // json object node 
     "label": [ // json array label 
      { 
       "pers_nom": "yen", 
       "pers_id": "1", 
       "pers_prenom": "ines", 
       "pers_email": "[email protected]", 
       "pers_phone": "443456784" 
      }, 
      { 
       "pers_nom": "Jamin", 
       "pers_id": "2", 
       "pers_prenom": " Derkok", 
       "pers_email": "[email protected]", 
       "pers_phone": "2345512398" 
      } 
     ] 
    } 
] 

應該像

@Override 
public void onResponse(JSONArray response) { 
Log.i(TAG,response.toString()); 
try{ 
    JSONObject value = response.getJSONObject(0); 
    JSONArray jr = value.getJSONArray("label"); 
    for(int i=0;i<jr.length();i++) 
    { 
    JSONObject jb = (JSONObject) jr.get(i); 
    String pers_nom = jb.getString("pers_nom"); 
    Log.i(".........",pers_nom); 
    ...// similarly for id and so on.. 
    } 
    ...// rest of the code 

編輯:

Response.Listener<JSONArray> listener = new Response.Listener<JSONArray>() 
     { 

      @Override 
      public void onResponse(JSONArray response) { 
       // TODO Auto-generated method stub 

      } 

     }; 
     Response.ErrorListener errorListener = new Response.ErrorListener() 
     { 

      @Override 
      public void onErrorResponse(VolleyError error) { 
       // TODO Auto-generated method stub 

      } 

     }; 

並使用

JsonArrayRequest jr =new JsonArrayRequest(Request.Method.GET,url, listener, errorListener) ; 

編輯2:

我檢查源,它看起來像下面

public JsonArrayRequest(String url, Listener<JSONArray> listener, ErrorListener errorListener) { 
      super(Method.GET, url, null, listener, errorListener); 

     } 
+0

所以我犯了一個錯誤。如果我將網絡服務格式更改爲: [{「pers_id」:「1」,「pers_nom」:「yen」,「pers_prenom」:「ines」,「pers_email」:「[email protected] 「,」pers_phone「:」443456784「},{」pers_id「:」2「,」pers_nom「:」Jamin「,」pers_prenom「:」Derkok「,」pers_email「:」[email protected]「, 「pers_phone」:「2345512398」}] 這意味着沒有JsonArray!但仍然得到相同的錯誤。 我的主要問題我怎樣才能訪問一個沒有json數組標籤的web服務? –

+1

它仍然是一個JSON數組響應。然後json對象,然後jsons tring – Raghunandan

+0

okey謝謝@拉古南丹。 我正在測試它 –

相關問題