Volley-POST-request, 400-Fehler

Dies ist das erste mal, dass ich mich die Arbeit mit JSON, aber ich experimentiere mit POST-Anfragen.

Ich will eine POST-Anfrage an diese website http://jsonblob.com/api

Mein code funktioniert, wenn ich einen asynctask + httppost

private static final String url = "http://jsonblob.com/api/jsonBlob";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new PostJsonTask().execute();
}

private class PostJsonTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... params) {
        try {
            HttpResponse response = post();
            Header s = response.getFirstHeader("Location");
            Log.d("PostJsonTask", s.getValue());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private HttpResponse post() throws Exception {
        //convert parameters into JSON object
        Map<String, String> params = new HashMap<String, String>();
        params.put("user", "Robby");
        params.put("pass", "zqdqzdqdqzd");
        JSONObject holder = new JSONObject(params);

        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);
        StringEntity se = new StringEntity(holder.toString());
        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
        post.setHeader("Accept", "application/json");
        post.setHeader("Content-type", "application/json");
        post.setEntity(se);
        return client.execute(post);
    }
}

Mit diesem code kann ich erfolgreich den Standort parameter.

Aber ich möchte das mit dem Volley-Bibliothek, ich habe bereits den folgenden code :

private static final String url = "http://jsonblob.com/api/jsonBlob";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    RequestQueue queue = Volley.newRequestQueue(this);

    StringRequest request = new StringRequest(Request.Method.POST, url, createResponseListener(), createErrorListener()) {
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headers = new HashMap<String, String>();
            headers.put("Accept", "application/json");
            headers.put("Content-type", "application/json");

            return headers;
        }

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("user", "Robby");
            params.put("pass", "zqdqzdqdqzd");

            return params;
        }

        @Override
        protected Response<String> parseNetworkResponse(
                NetworkResponse response) {
            Map<String, String> headers = response.headers;
            String location = headers.get("Location");
            Log.d("PostJsonTask", location);

            return super.parseNetworkResponse(response);
        }
    };

    queue.add(request);
}

private ErrorListener createErrorListener() {
    return new ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    };
}

private Listener<String> createResponseListener() {
    return new Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d("PostJsonTask", response);
        }
    };
}

Aber das gibt eine VolleyError mit code 400. Wie kann ich dieses Problem beheben?

  • Und VolleyError 400 bedeutet?
  • Verwenden Sie createResponseListener() als parameter in new StringRequest (), wo createResponseListener ausreichen würde?
InformationsquelleAutor Robby Smet | 2014-05-19
Schreibe einen Kommentar