2015-05-22 10 views
7

Zamieszczam niektóre dane do bazy danych za pomocą Volley i otrzymuję następującą odpowiedź jsonarray.Odpowiedź JSONArray z Volley dla Androida

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

To jest przykład z mojego kodu, który niestety nie wylogować lub debugowania zmienną „nick” obiektu :(.

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"; 
     } 


    }; 

Jakieś pomysły? Czy ja czegoś brakuje?

Dzięki

+1

kod wydaje się być w porządku. czy dodajesz 'jsonObjReq1' do żądania kolejki? –

Odpowiedz

8

I może być problem. - jesteś już coraz response jako JSONArray

.

Tak, można zadzwonić

JSONObject jresponse = response.getJSONObject(0);

a jeśli masz więcej niż 1 przedmiot w odpowiedzi, potem

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

Usuń to:

   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(); 
       } 

i dodać:

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

Kod wygląda dobrze, ale myślę, że może brakować połączenia, aby dodać jsonObjReq1 w kolejce żądania. Proponuję użyć Singleton Pattern.

+0

Dzięki za odpowiedź. Tak jsonObjReq1 jest w kolejce. – Theo

+0

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

+0

Ale nie wiem co jest nie tak i nie można odczytać obiektu pseudonimu. To takie denerwujące! – Theo

1

Naprawiono !!!

   @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(); 

       } 

Nie było potrzeby tworzenia nowego JSONArray. Został stworzony wewnątrz metody onResponse(). Kolejny projekt, do którego mam przydzielenie, będzie bardziej skomplikowany pod adresem webservices.omg !!!

+1

Nie musisz i własne pytanie. Zaakceptuj moje i jeśli było pomocne –

+0

Hej, otrzymuję 'can not resolve getJSONObject (int)'. Jakieś domysły? – impossible

Powiązane problemy