web-dev-qa-db-fra.com

Réponse JSONArray avec Volley pour Android

Je publie des données dans la base de données à l'aide de Volley et j'obtiens la réponse jsonarray suivante.

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

Ceci est un exemple de mon code qui ne se déconnecte malheureusement pas ou ne débogue pas la variable de l'objet "pseudo" :(.

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


    };

Des idées? Suis-je en train de manquer quelque chose?

Merci.

8
Theo

Si le problème est peut-être - vous obtenez déjà response en tant que JSONArray.

Vous pouvez donc appeler

JSONObject jresponse = response.getJSONObject(0);

et si vous avez plus d'un objet en réponse, alors

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

Enlève ça :

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

et ajouter :

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

Le code semble bon, mais je pense que vous pourriez manquer un appel pour ajouter jsonObjReq1 dans la file d'attente des demandes. Je suggère d'utiliser Singleton Pattern .

8
Kushal Sharma

Fixé!!!

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

                }

Il n'était pas nécessaire de créer un nouveau JSONArray. Il a été créé à l'intérieur de la méthode onResponse (). Le prochain projet que je suis chargé de faire va avoir des webservices.omg plus compliqués !!!

1
Theo