Google Volley : Come inviare una richiesta POST con i dati JSON ?

? anthony @ | Original: StackOverFlow
---

Vorrei inviare una nuova richiesta JsonObjectRequest :

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

Voglio inviare JSON dati formattati con questa richiesta al server

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;
                    }
                };

Grazie mille ragazzi !

Ps: Io uso GSON lib nel mio progetto troppo .

---

Top 5 Risposta

1shkschneider @

JsonObjectRequest actuallyaccepts JSONObject come corpo .

Da 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>() { ... });

Ecco il codice ufficiale e 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 @

Creare un oggetto di classe RequestQueue .

RequestQueue queue = Volley.newRequestQueue(this);

Creare un StringRequest con risposta e di errore ascoltatore .

 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;
    }
};

Aggiungi la tua richiesta nel RequestQueue .

queue.add(jsObjRequest);

Crea PostCommentResponseListener interfaccia solo così si può vedere . E 'un semplice delegato per la richiesta asincrona .

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

Includere il permesso INTERNET dentro AndroidManifest.xml file.

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