Después de investigar con expertos en la materia, programadores de diversas áreas y maestros hemos dado con la solución al problema y la dejamos plasmada en este post.
Solución:
Solo tienes que hacer un JSONObject desde tu HashMap de parámetros:
String url = "https://www.youraddress.com/";
Map params = new HashMap();
params.put("first_param", 1);
params.put("second_param", 2);
JSONObject parameters = new JSONObject(params);
JsonObjectRequest jsonRequest = new JsonObjectRequest(Request.Method.POST, url, parameters, new Response.Listener()
@Override
public void onResponse(JSONObject response)
//TODO: handle success
, new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
error.printStackTrace();
//TODO: handle failure
);
Volley.newRequestQueue(this).add(jsonRequest);
Terminé usando StringRequest de Volley en su lugar, porque estaba usando demasiado tiempo valioso tratando de hacer que JsonObjectRequest funcionara.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://myserveraddress";
StringRequest strRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener()
@Override
public void onResponse(String response)
Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
,
new Response.ErrorListener()
@Override
public void onErrorResponse(VolleyError error)
Toast.makeText(getApplicationContext(), error.toString(), Toast.LENGTH_SHORT).show();
)
@Override
protected Map getParams()
Map params = new HashMap();
params.put("tag", "test");
return params;
;
queue.add(strRequest);
Esto funcionó para mí. Es tan simple como JsonObjectRequest, pero usa una cadena en su lugar.
Tuve un problema similar, pero descubrí que el problema no estaba en el lado del cliente, sino en el lado del servidor. Cuando envías un JsonObject
necesita obtener el objeto POST como este (en el lado del servidor):
En PHP:
$json = json_decode(file_get_contents('php://input'), true);
Te mostramos comentarios y calificaciones
Acuérdate de que tienes la capacidad de aclarar si te ayudó.