Volea - Parámetros POST/GET

Resuelto Ziem asked hace 54 años • 8 respuestas

Vi la sesión de Google IO 2013 sobre Volley y estoy considerando cambiarme a Volley. ¿Volley admite agregar parámetros POST/GET a la solicitud? En caso afirmativo, ¿cómo puedo hacerlo?

Ziem avatar Jan 01 '70 08:01 Ziem
Aceptado

Para los parámetros GET existen dos alternativas:

Primero : como se sugiere en un comentario debajo de la pregunta, puede usar String y reemplazar los marcadores de posición de los parámetros con sus valores como:

String uri = String.format("http://somesite.com/some_endpoint.php?param1=%1$s&param2=%2$s",
                           num1,
                           num2);

StringRequest myReq = new StringRequest(Method.GET,
                                        uri,
                                        createMyReqSuccessListener(),
                                        createMyReqErrorListener());
queue.add(myReq);

donde num1 y num2 son variables de cadena que contienen sus valores.

Segundo : si está utilizando HttpClient externo más nuevo (4.2.x por ejemplo), puede usar URIBuilder para construir su Uri. La ventaja es que si su cadena uri ya tiene parámetros, será más fácil pasarla URIBuildery luego usarla ub.setQuery(URLEncodedUtils.format(getGetParams(), "UTF-8"));para agregar sus parámetros adicionales. De esa manera no te molestarás en comprobar si "?" ya está agregado al uri o se pierde alguno y, por lo tanto, se elimina una fuente de posibles errores.

Para los parámetros POST probablemente a veces será más fácil que la respuesta aceptada hacerlo como:

StringRequest myReq = new StringRequest(Method.POST,
                                        "http://somesite.com/some_endpoint.php",
                                        createMyReqSuccessListener(),
                                        createMyReqErrorListener()) {

    protected Map<String, String> getParams() throws com.android.volley.AuthFailureError {
        Map<String, String> params = new HashMap<String, String>();
        params.put("param1", num1);
        params.put("param2", num2);
        return params;
    };
};
queue.add(myReq);

por ejemplo, simplemente anular el getParams()método.

Puede encontrar un ejemplo funcional (junto con muchos otros ejemplos básicos de Volley) en el proyecto Andorid Volley Ejemplos .

Ognyan avatar May 28 '2013 15:05 Ognyan

CustomRequest es una forma de resolver que JSONObjectRequest de Volley no pueda publicar parámetros como elStringRequest

aquí está la clase auxiliar que permite agregar parámetros:

    import java.io.UnsupportedEncodingException;
    import java.util.Map;    
    import org.json.JSONException;
    import org.json.JSONObject;    
    import com.android.volley.NetworkResponse;
    import com.android.volley.ParseError;
    import com.android.volley.Request;
    import com.android.volley.Response;
    import com.android.volley.Response.ErrorListener;
    import com.android.volley.Response.Listener;
    import com.android.volley.toolbox.HttpHeaderParser;

    public class CustomRequest extends Request<JSONObject> {

    private Listener<JSONObject> listener;
    private Map<String, String> params;

    public CustomRequest(String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(Method.GET, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    public CustomRequest(int method, String url, Map<String, String> params,
            Listener<JSONObject> reponseListener, ErrorListener errorListener) {
        super(method, url, errorListener);
        this.listener = reponseListener;
        this.params = params;
    }

    protected Map<String, String> getParams()
            throws com.android.volley.AuthFailureError {
        return params;
    };

    @Override
    protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
        try {
            String jsonString = new String(response.data,
                    HttpHeaderParser.parseCharset(response.headers));
            return Response.success(new JSONObject(jsonString),
                    HttpHeaderParser.parseCacheHeaders(response));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JSONException je) {
            return Response.error(new ParseError(je));
        }
    }

    @Override
    protected void deliverResponse(JSONObject response) {
        // TODO Auto-generated method stub
        listener.onResponse(response);
    }

}

gracias a greenchiu

LOG_TAG avatar Aug 13 '2013 10:08 LOG_TAG