2015-05-22 8 views
7

Я отправляю некоторые данные в базу данных с помощью Volley, и я получаю следующий ответ jsonarray.Ответ JSONArray с Volley для Android

[ 
    { 
    "nickname":"panikos", 
    "username":"[email protected]", 
    "user_type":"LEADER", 
    "latest_steps":"0" 
    } 
] 

Это пример моего кода, который, к сожалению, не выйти или отладить переменную «ник» объекта :(.

final JsonArrayRequest jsonObjReq1 = new 
JsonArrayRequest(AppConfig.URL_GET_TEAM, jsonObject, 
      new com.android.volley.Response.Listener<JSONArray>() { 

       @Override 
       public void onResponse(JSONArray response) { 
        Log.d("TAG", response.toString()); 

        try { 
         JSONArray jsonArray = new JSONArray(response); 

         for(int i=0;i<jsonArray.length();i++){ 
          JSONObject jresponse = 
       jsonArray.getJSONObject(i); 
       String nickname =         
      jresponse.getString("nickname"); 
          Log.d("nickname",nickname); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        //pDialog.dismiss(); 

       } 
      }, new com.android.volley.Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d("TAG", "Error: " + error.getMessage()); 
      //pDialog.dismiss(); 

     } 
    }) { 

     @Override 
     public String getBodyContentType() { 
      return "application/json; charset=utf-8"; 
     } 


    }; 

Любые идеи? Я-то отсутствует?

Благодаря

+1

код выглядит нормально. вы добавляете 'jsonObjReq1' для запроса очереди? –

ответ

8

я проблема может быть. - вы уже получаете response как JSONArray

.

Таким образом, вы можете позвонить

JSONObject jresponse = response.getJSONObject(0);

и если у вас есть более чем 1 объект в ответ, а затем

for(int i = 0; i < response.length(); i++){ 
    JSONObject jresponse = response.getJSONObject(i); 
    String nickname = jresponse.getString("nickname"); 
    Log.d("nickname", nickname); 
} 

Удалить это:

   try { 
        JSONArray jsonArray = new JSONArray(response); 

        for(int i=0;i<jsonArray.length();i++){ 
         JSONObject jresponse = 
      jsonArray.getJSONObject(i); 
      String nickname =         
     jresponse.getString("nickname"); 
         Log.d("nickname",nickname); 
        } 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 

и добавить:

try { 
    JSONObject jresponse = response.getJSONObject(0); 
    String nickname = jresponse.getString("nickname"); 
    Log.d("nickname",nickname); 
}catch (JSONException e) { 
    e.printStackTrace(); 
} 

Код выглядит неплохо, однако, я думаю, вам может быть недостает вызова, чтобы добавить jsonObjReq1 в очередь запросов. Я бы предложил использовать Singleton Pattern.

+0

Спасибо за ответ. Да jsonObjReq1 находится в очереди. – Theo

+0

AppController.getInstance(). AddToRequestQueue (jsonObjReq1, tag_json_obj); – Theo

+0

Но я не ошибаюсь и не могу прочитать объект прозвища. Это так раздражает! – Theo

1

Исправлено!

   @Override 
       public void onResponse(JSONArray response) { 
        Log.d("TAG", response.toString()); 

        try { 

         Log.d("JsonArray",response.toString()); 
         for(int i=0;i<response.length();i++){ 
          JSONObject jresponse = response.getJSONObject(i); 
          String nickname = jresponse.getString("nickname"); 
          Log.d("nickname",nickname); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        //pDialog.dismiss(); 

       } 

Не нужно было создавать новый JSONArray. Он был создан внутри метода onResponse(). Следующий проект, которому я назначен, будет больше усложнять webservices.omg !!!

+1

У вас нет необходимости и на свой вопрос .. Примите мое, и если это было полезно –

+0

Эй, я получаю 'не могу разрешить getJSONObject (int)'. Какие-нибудь догадки? – impossible

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