Senden einer POST-Anforderung mit JSONArray mit Volley
Ich senden möchten, einen einfachen POST-request in Android mit einem Körper gleich :
[
{
"value": 1
}
]
Habe ich versucht zu verwenden, Volley-Bibliothek in Android, und das ist mein 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);
Das problem ist, dass die getParams-Methode akzeptiert nur ein Map-Objekt, da will ich senden Sie ein JSONArray. Also, ich bin verpflichtet, eine Besetzung, die einen Fehler erzeugen, dann...
Weiß ich nicht, wie kann ich den Fehler beheben
Danke
Lesen Sie meine asnwer hier. Aber dein json ist JSONArray, nicht JSONObject.
kannst du das näher ausdrückliche? Ich immer noch nicht, code dies jsonArray... danke für euer Verständnis
JSONObject jsonBody = new JSONObject("{\"value\": 1}"); JSONObject beginnt mit { und endet mit }. Außerdem, was ist die Fehlermeldung hast du bekommen? Pls poste es und alle logcat info, wenn verfügbar.
danke Mann, die ich endlich gelöst dieses Teil, da ich ein JSONArray. Aber ich bekomme einen anderen Fehler wegen der getparams method...
Pls poste es und alle logcat info, wenn verfügbar. Darüber hinaus overrid getBody statt getParams für POST-body params
kannst du das näher ausdrückliche? Ich immer noch nicht, code dies jsonArray... danke für euer Verständnis
JSONObject jsonBody = new JSONObject("{\"value\": 1}"); JSONObject beginnt mit { und endet mit }. Außerdem, was ist die Fehlermeldung hast du bekommen? Pls poste es und alle logcat info, wenn verfügbar.
danke Mann, die ich endlich gelöst dieses Teil, da ich ein JSONArray. Aber ich bekomme einen anderen Fehler wegen der getparams method...
Pls poste es und alle logcat info, wenn verfügbar. Darüber hinaus overrid getBody statt getParams für POST-body params
InformationsquelleAutor fujitsu4 | 2015-09-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie in meinem folgenden Beispiel-code:
- UPDATE für Ihr pastebin link:
Da die Antworten vom server eine
JSONArray
, ich benutzeJsonArrayRequest
stattJsonObjectRequest
. Und keine Notwendigkeit zum überschreibengetBody
mehr.Mein code funktioniert sowohl für Googles offiziellen volley geliefert und mcxiaoke Bibliothek
Wenn Sie verwenden möchten Google's Bibliothek, nachdem man git clone, wie Google Dokumentation, kopieren android Ordner aus
\src\main\java\com
(Volleyball-Projekt, das Sie geklont)\app\src\main\java\com
Ihres Projekts wie im folgenden screenshot:Den
build.gradle
sollte Folgendes enthaltenWenn Ihr Projekt verwendet mcxiaoke's Bibliothek, die
build.gradle
wird wie folgt Aussehen (achten Sie aufdependencies
):Schlage ich vor, daß Sie erstellen Sie 2 neue Beispiel-Projekte, dann wird man verwenden Google's Bibliothek, die andere verwenden mcxiaoke's Bibliothek.
ENDE UPDATE
Dem folgenden screenshot ist das, was server-side-web-service erhalten:
Ich denke, dass Ihr Projekt verwendet volley-Bibliothek, indem
compile 'com.mcxiaoke.volley:library:1.0.17'
im bauen.gradle-Datei. Mein Projekt nutzt Google die offizielle Volleyball-Bibliothek. Sie können ersetzen PROTOCOL_CHARSET durch "utf-8"Ich bin noch immer ein Fehler : com.android.volley.ServerError. Vielleicht ist es aufgrund volley-Bibliothek, die schlecht programmiert?? Vielleicht wird es eine Lösung sein, nehmen Sie den google?
JA, JA, JA, es funktioniert endlich. Ich danke Ihnen so so so so so viel, wirklich, DANKE Mann !
Genau das, was ich gebraucht habe 🙂
InformationsquelleAutor BNK