Noé, miembro de nuestro staff, nos ha hecho el favor de redactar este artículo ya que domina perfectamente el tema.
Solución:
intenta usar esta clase de ayuda
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
private Listener listener;
private Map params;
public CustomRequest(String url, Map params,
Listener reponseListener, ErrorListener errorListener)
super(Method.GET, url, errorListener);
this.listener = reponseListener;
this.params = params;
public CustomRequest(int method, String url, Map params,
Listener reponseListener, ErrorListener errorListener)
super(method, url, errorListener);
this.listener = reponseListener;
this.params = params;
protected Map getParams()
throws com.android.volley.AuthFailureError
return params;
;
@Override
protected Response 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);
En actividad/fragmento usa esto
RequestQueue requestQueue = Volley.newRequestQueue(getActivity());
CustomRequest jsObjRequest = new CustomRequest(Method.POST, url, params, this.createRequestSuccessListener(), this.createRequestErrorListener());
requestQueue.add(jsObjRequest);
Puedes crear una personalizada JSONObjectReuqest
y anular el getParams
método, o puede proporcionarlos en el constructor como un JSONObject
para colocar en el cuerpo de la solicitud.
Así (edité tu código):
JSONObject obj = new JSONObject();
obj.put("id", "1");
obj.put("name", "myname");
RequestQueue queue = MyVolley.getRequestQueue();
JsonObjectRequest jsObjRequest = new JsonObjectRequest(Request.Method.POST,SPHERE_URL,obj,
new Response.Listener()
@Override
public void onResponse(JSONObject response)
System.out.println(response);
hideProgressDialog();
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
hideProgressDialog();
);
queue.add(jsObjRequest);
¡Fácil para mí! Lo conseguí hace unas semanas:
esto entra getBody()
método, no en getParams()
para una solicitud de publicación.
Aquí esta el mio :
@Override
/**
* Returns the raw POST or PUT body to be sent.
*
* @throws AuthFailureError in the event of auth failure
*/
public byte[] getBody() throws AuthFailureError
// Map params = getParams();
Map params = new HashMap();
params.put("id","1");
params.put("name", "myname");
if (params != null && params.size() > 0)
return encodeParameters(params, getParamsEncoding());
return null;
(Supuse que desea PUBLICAR los parámetros que escribió en su getParams)
Le di los parámetros a la solicitud dentro del constructor, pero dado que está creando la solicitud sobre la marcha, puede codificarlos dentro de su anulación del método getBody().
Así es como se ve mi código:
Bundle param = new Bundle();
param.putString(HttpUtils.HTTP_CALL_TAG_KEY, tag);
param.putString(HttpUtils.HTTP_CALL_PATH_KEY, url);
param.putString(HttpUtils.HTTP_CALL_PARAM_KEY, params);
switch (type) {
case RequestType.POST:
param.putInt(HttpUtils.HTTP_CALL_TYPE_KEY, RequestType.POST);
SCMainActivity.mRequestQueue.add(new SCRequestPOST(Method.POST, url, this, tag, receiver, params));
y si quieres aun mas esto ultimo string parámetros viene de :
param = JsonUtils.XWWWUrlEncoder.encode(new JSONObject(paramasJObj)).toString();
y el paramasJObj es algo como esto: "id"="1","name"="myname"
el JSON habitual string.