2016-07-30 12 views
0

Ich habe jede einzelne verfügbare Methode auf Stackoverflow versucht, aber das Ergebnis bleibt gleich.Code-Response-Code 400 beim Senden von POST-Parametern und Headern mit Volley

I want to send params and also api key in the Authorization field of header using volley.

Hier ist das Code-Snippet.

holder.comment_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String POSTCOMMENT_URL = Utility.getIPADDRESS()+"comments"; 
      volleySingleton = VolleySingleton.getInstance(); 
      requestQueue = volleySingleton.getRequestQueue(); 
      JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, POSTCOMMENT_URL, null, new Response.Listener<JSONObject>() { 
       @Override 
       public void onResponse(JSONObject response) { 
        Log.e("Response: " , response.toString()); 
        Toast.makeText(myApplication.getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show(); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(myApplication.getApplicationContext(),"Error", Toast.LENGTH_LONG).show(); 
       } 
      }){ 
       @Override 
       public String getBodyContentType() { 
        return "application/x-www-form-urlencoded; charset=UTF-8"; 
       } 
       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String, String> params = new HashMap<>(); 
        params.put("Authorization", getApiKey()); 
        return params; 
       } 

       @Override 
       protected Map<String, String> getParams() { 
        Map<String, String> params = new HashMap<>(); 
        params.put("pid", "39"); 
        params.put("comment", "mobile testing"); 
        return params; 
       } 

      }; 
      requestQueue.add(jsonObjectRequest); 
     } 
    }); 

ich diesen Fehler:

[5333] BasicNetwork.performRequest: Unexpected response code 400 for http://www.XXXXXXXXXXX.com/comments

Ich habe bereits getestet, um den Endpunkt mit Advanced REST-Client, funktioniert es und gibt den JsonObject mit zuvor hinzugefügten Kommentar.

Hier sind die Ergebnisse:

{ 
"error": false 
"message": "comment added successfully added!" 
"comment_id": "12" 
"user_id": "12" 
"pid": "39" 
"comment": "testing for stackoverflow" 
"date of comment": "2016-07-30 13:49:08" 
} 
+0

Was bedeutet 400? – greenapps

+0

Die Anfrage konnte vom Server aufgrund einer fehlerhaften Syntax nicht verstanden werden. Kurz gesagt _Bad Netzwerkanforderung_. –

+0

'Zeichenfolge POSTCOMMENT_URL = Utility.getIPADDRESS() +" Kommentare ";'. Das sollte "String POSTCOMMENT_URL = Utility.getIPADDRESS() +"/comments ";"? Wenn nicht, dann ist der Funktionsname verwirrend. – greenapps

Antwort

0

Ok, nach einer langen Forschung und dumm eher wertvollen ändert, ist es schließlich für mich gearbeitet.

Hier ist der Arbeitscode:

holder.comment_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(final View view) { 

      final String api_key = getApiKey(); 
      String POSTCOMMENT_URL = Utility.getIPADDRESS()+"comments"; 
      volleySingleton = VolleySingleton.getInstance(); 
      requestQueue = volleySingleton.getRequestQueue(); 
      StringRequest stringRequest = new StringRequest(Request.Method.POST, POSTCOMMENT_URL, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        Toast.makeText(myApplication.getApplicationContext(),response,Toast.LENGTH_LONG).show(); 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(myApplication.getApplicationContext(),error.toString(),Toast.LENGTH_LONG).show(); 
       } 
      }) { 

       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 
        Map<String, String> params = new HashMap<>(); 
        params.put("Authorization", api_key); 
        return params; 
       } 

       @Override 
       protected Map<String, String> getParams() { 
        Map<String, String> params = new HashMap<>(); 
        params.put("pid", "40"); 
        params.put("comment", "testing"); 
        return params; 
       } 

      }; 
      requestQueue.add(stringRequest); 
     } 
    }); 

Note: It worked for me, I'm not sure about others.

Änderungen sind: ändern JsonObjectRequest StringRequest und jede Content-Type Abschminken keinen Unterschied, so dass ich entfernt es.

Also, make sure all the params have some values i.e test it by logging.

Verwandte Themen