Envoi d'une requête POST avec JSONArray à l'aide de Volley
Je veux envoyer une simple demande POST dans Android avec un corps en égalant cette :
[
{
"value": 1
}
]
J'ai essayé d'utiliser le Volley-bibliothèque sous Android, et c'est mon code :
//the jsonArray that I want to POST
String json = "[{\"value\": 1}]";
JSONArray jsonBody = null;
try {
jsonBody = new JSONArray(json);
} catch (JSONException e) {
e.printStackTrace();
}
final JSONArray finalJsonBody = jsonBody;
//starting the request
final RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest request =
new JsonObjectRequest(com.android.volley.Request.Method.POST,"https://...",null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("mytag", "Response is: " + response);}},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Mytag", "error");}}) {
@Override
protected Map<String,String> getParams() {
//the problem is here...
return (Map<String, String>) finalJsonBody;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
//I put all my headers here like the following one :
params.put("Content-Type", "application/json");
return params;}};
queue.add(request);
Le problème est que le getParams méthode accepte uniquement un objet Map car je veux envoyer un JSONArray. Donc, je suis obligé d'utiliser un cast, ce qui génère une erreur alors...
Je ne sais pas comment puis-je régler ce problème
Merci
Lire mon asnwer ici. Cependant, votre json est JSONArray, pas JSONObject.
pouvez-vous être plus explicite? Je ne comprends toujours pas le code de cette jsonArray... merci de votre compréhension
JSONObject jsonBody = new JSONObject("{\"la valeur\": 1}"); un JSONObject commence par { et se termine avec }. En outre, quel est le message d'erreur avez-vous? Post-it de Pls et de toute logcat info si disponible.
merci man, j'ai enfin résolu ce problème depuis que j'utilise un JSONArray. Mais j'ai une autre erreur en raison de la getparams méthode...
Post-it de Pls et de toute logcat info si disponible. En outre, overrid getBody au lieu de getParams pour le corps POST params
pouvez-vous être plus explicite? Je ne comprends toujours pas le code de cette jsonArray... merci de votre compréhension
JSONObject jsonBody = new JSONObject("{\"la valeur\": 1}"); un JSONObject commence par { et se termine avec }. En outre, quel est le message d'erreur avez-vous? Post-it de Pls et de toute logcat info si disponible.
merci man, j'ai enfin résolu ce problème depuis que j'utilise un JSONArray. Mais j'ai une autre erreur en raison de la getparams méthode...
Post-it de Pls et de toute logcat info si disponible. En outre, overrid getBody au lieu de getParams pour le corps POST params
OriginalL'auteur fujitsu4 | 2015-09-23
Vous devez vous connecter pour publier un commentaire.
Vous pouvez vous référer à mon exemple de code suivant:
Mise à JOUR pour votre lien pastebin:
Parce que les réponses du serveur un
JSONArray
, j'utiliseJsonArrayRequest
au lieu deJsonObjectRequest
. Et pas besoin de surchargergetBody
plus.Mon code fonctionne pour les deux officielle de Google volley bibliothèque et mcxiaoke de la bibliothèque de l'
Si vous souhaitez utiliser Google's de la bibliothèque, après avoir git clone comme Google documents, copie android dossier de
\src\main\java\com
(projet de Volley-ball que vous avez cloné) à\app\src\main\java\com
de votre projet comme la capture d'écran suivante:La
build.gradle
doit contenir les éléments suivantsSi votre projet utilise des mcxiaoke's de la bibliothèque, le
build.gradle
ressemblera à celui-ci (attention àdependencies
):Je suggère que vous permettra de créer 2 nouveaux projets de l'échantillon, alors on va utiliser Google's de la bibliothèque, l'autre va utiliser mcxiaoke's de la bibliothèque.
FIN DE LA MISE À JOUR
La capture d'écran suivante, est ce que service web côté serveur de réception:
Je suppose que votre projet utilise volley de la bibliothèque par
compile 'com.mcxiaoke.volley:library:1.0.17'
dans la construction.gradle fichier. Mon projet utilise Google officielles du volley de la bibliothèque. Vous pouvez remplacer PROTOCOL_CHARSET par "utf-8"J'ai toujours une erreur : com.android.le volley.ServerError. C'est peut-être en raison de volley de la bibliothèque qui est mal programmé?? Ce sera peut-être une solution pour prendre le google?
OUI, OUI, OUI, cela fonctionne enfin. Merci tellement tellement tellement tellement tellement, je vous REMERCIE vraiment homme !
Exactement ce dont j'avais besoin 🙂
OriginalL'auteur BNK