Google Volley : Wie man eine POST-Anforderung mit JSON-Daten schicken ?

? anthony @ | Original: StackOverFlow
---

Ich möchte einen neuen JsonObjectRequest Anfrage senden :

I want to receive Json data (response from server):OK

Ich möchte JSON -formatierte Daten mit dieser Anfrage an den Server senden

JsonObjectRequest request =
        new JsonObjectRequest(
                Request.Method.POST,
                "myurl.com",
                null,
                new Response.Listener<JSONObject>() {
                    @Override
                    public void onResponse(JSONObject response) {
                       //...
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                       //...
                    }
                })
                {
                    @Override
                    protected Map<String,String> getParams() {
                        // something to do here ??
                        return params;
                    }

                    @Override
                    public Map<String, String> getHeaders() throws AuthFailureError                    {
                        // something to do here ??
                        return params;
                    }
                };

Vielen Dank, Jungs!

Ps: Ich benutze Gson lib in meinem Projekt zu .

---

Top 5 Antwort

1shkschneider @

JsonObjectRequest actuallyaccepts JSONObject als Körper.

von http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/

final String url = "some/url";
final JSONObject jsonBody = /* ... */;

new JsonObjectRequest(url, jsonBody, new Response.Listener<JSONObject>() { ... });

Hier ist die offizielle Code und javadoc ( param jsonRequest ) :

/**
 * Creates a new request.
 * @param method the HTTP method to use
 * @param url URL to fetch the JSON from
 * @param jsonRequest A {@link JSONObject} to post with the request. Null is allowed and
 *   indicates no parameters will be posted along with request.
 * @param listener Listener to receive the JSON response
 * @param errorListener Error listener, or null to ignore errors.
 */
public JsonObjectRequest(int method, String url, JSONObject jsonRequest,
        Listener<JSONObject> listener, ErrorListener errorListener) {
    super(method, url, (jsonRequest == null) ? null : jsonRequest.toString(), listener,
                errorListener);
}

https://android.googlesource.com/platform/frameworks/volley/+/master/src/com/android/volley/toolbox/JsonObjectRequest.java

2Manish Dubey @

Erstellen Sie ein Objekt von RequestQueue Klasse.

RequestQueue queue = Volley.newRequestQueue(this);

Erstellen Sie ein StringRequest mit der Reaktion und Fehler Zuhörer.

 StringRequest sr = new StringRequest(Request.Method.POST,"http://api.someservice.com/post/comment", new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        mPostCommentResponse.requestCompleted();
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        mPostCommentResponse.requestEndedWithError(error);
    }
}){
    @Override
    protected Map<String,String> getParams(){
        Map<String,String> params = new HashMap<String, String>();
        params.put("user",userAccount.getUsername());
        params.put("pass",userAccount.getPassword());
        params.put("comment", Uri.encode(comment));
        params.put("comment_post_ID",String.valueOf(postId));
        params.put("blogId",String.valueOf(blogId));

        return params;
    }

    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String,String> params = new HashMap<String, String>();
        params.put("Content-Type","application/x-www-form-urlencoded");
        return params;
    }
};

Fügen Sie Ihre Anfrage in das RequestQueue .

queue.add(jsObjRequest);

Erstellen PostCommentResponseListener Schnittstelle nur, damit Sie sie sehen können. Es ist ein einfacher Delegierter für die asynchrone Anfrage.

public interface PostCommentResponseListener {
public void requestStarted();
public void requestCompleted();
public void requestEndedWithError(VolleyError error);
}

Fügen INTERNET Erlaubnis inside AndroidManifest.xml Datei.

<uses-permission android:name="android.permission.INTERNET"/>