2017-08-23 1 views
1

Cette question peut ressembler à un double (il est pas), mais je suis coincé avec cette erreur de JSONException:Comment POST paramètres à l'aide JSONArrayRequest dans Volley - (chaîne d'erreur ne peuvent pas être convertis en jsonarray)

Value die of type java.lang.String cannot be converted to JSONArray.

J'utilise JsonArrayRequest de Volley pour obtenir jsonarray à partir d'un serveur. Mon JsonArrayRequest jette l'erreur ci-dessus, comme je veux post une chaîne au serveur et reçois jsonarray comme réponse. Ci-dessous est mon code:

JsonArrayRequest jsonReq = new JsonArrayRequest(Request.Method.POST, 
      URL, null, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      // Parsing json 
      for (int i = 0; i < response.length(); i++) { 
       try { 
        JSONObject JO = response.getJSONObject(i); 
        GetterSetter getterSetter = new GetterSetter(); 

        getterSetter.setName(JO.getString("name")); 
        getterSetter.setNumber(JO.getString("number")); 
        getterSetter.setDate(JO.getString("date")); 

        myList.add(getterSetter); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      myAdapter.notifyDataSetChanged(); 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      VolleyLog.d(TAG, "Error: " + error.getMessage()); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() { 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("myKey", myValue); 

      return params; 
     } 
    }; 
    MySingleton.getInstance().addToRequestQueue(jsonReq); 
} 

Le fichier PHP fonctionne correctement et il transmet la chaîne json à android.

L'erreur se produit quelque part dans le bloc onResponse. Le même bloc fonctionne correctement lorsque vous utilisez StringRequest au lieu de JsonArrayRequest.

Une idée de ce qui cause exactement cette erreur? Toute aide ou orientation est très appréciée. * Je suis nouveau dans Android Volley et la façon dont cela fonctionne.

EDIT

Ceci est un format/syntaxe de la réponse url:

[ 
    {"name":"test", 
    "number":"123", 
    "date":"2017-08-22" 
    }, 
    {"name":"test1", 
    "number":"1234", 
    "date":"2017-08-23" 
    } 
] 
+0

Je pense que le problème lié aux moyens de réponse Votre réponse est une chaîne de caractères et n'accepte que JSONArray. vérifier la réponse sur Postman ou RestClient. –

+0

Publiez la réponse JSON. – fluffyBatman

+0

essayer d'ouvrir l'URL de facteur, je pense que la réponse PHP n'est pas un JSON valide, la plupart du temps c'est un message d'erreur contient le mot 'die' le fameux PHP' ou mourir (...) ', plz partager le code PHP – Yazan

Répondre

1

Essayez d'utiliser StringRequest puis créer votre propre JSONArray de la chaîne de réponse:

new JSONArray(response); 

Vous pouvez trouver l'exemple StringRequest à partir de la documentation:

Sending a Simple Request

+0

Même si je voulais utiliser 'JsonArrayRequest', cela fonctionne aussi bien. Je vous remercie! – Dan