volley tutorial que peticiones android header android-volley

tutorial - peticiones http android



Obtener encabezados de una respuesta en voley (2)

Estoy trabajando con Volley, quiero hacer una solicitud a un servidor que me devuelve un JSON en la "capa visible" (puedo verlo en el navegador web). Mi problema es que el servidor también me devuelve la información de los encabezados que necesito ingresar en mi aplicación, pero no puedo obtener los encabezados de la solicitud.

He buscado durante mucho tiempo pero no he encontrado nada útil (solo agregué datos al encabezado de la solicitud, pero no obtuve datos de la respuesta del encabezado)

¿Alguien sabe cómo implementar eso?


si la solicitud está volviendo json, deberías poder leerla normalmente si no es que el problema es de json, no de la aplicación de Android

aquí hay un ejemplo de manejo de solicitudes

RequestQueue queue = Volley.newRequestQueue(MainActivity.this); JsonArrayRequest getRequest = new JsonArrayRequest(Request.Method.GET, "http://yourlink+parameters", new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { List<YourObject> reservations = null; try { YourObject= new ArrayList<YourObject>(); for (int i = 0; i < response.length(); i++) { JSONObject obj = response.getJSONObject(i); YourObjectr = new YourObject(obj.getInt("id"), obj.getInt("user_id"),format.parse(obj.getString("date")), obj.getString("address"), obj.getString("description")); } } catch (ParseException e) { e.printStackTrace(); } } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { if (volleyError.networkResponse != null && volleyError.networkResponse.data != null) { VolleyError error = new VolleyError(new String(volleyError.networkResponse.data)); volleyError = error; Log.i("error", "error :" + volleyError.getMessage()); try { JSONObject obj = new JSONObject(volleyError.getMessage()); if (obj.getString("error").equals("token_expired")) { Intent i = new Intent(MainActivity.this, LoginActivity.class); startActivity(i); } } catch (JSONException e) { e.printStackTrace(); } } else { new AlertDialog.Builder(MainActivity.this) .setTitle("connection problem") .setMessage("check your connection") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }) .setIcon(android.R.drawable.ic_dialog_alert) .show(); } } }); queue.add(getRequest);


Para obtener los encabezados que necesita para anular parseNetworkResponse en su solicitud.

por ejemplo, JsonObjectRequest:

public class MetaRequest extends JsonObjectRequest { public MetaRequest(int method, String url, JSONObject jsonRequest, Response.Listener <JSONObject> listener, Response.ErrorListener errorListener) { super(method, url, jsonRequest, listener, errorListener); } public MetaRequest(String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { super(url, jsonRequest, listener, errorListener); } @Override protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers, PROTOCOL_CHARSET)); JSONObject jsonResponse = new JSONObject(jsonString); jsonResponse.put("headers", new JSONObject(response.headers)); return Response.success(jsonResponse, HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } catch (JSONException je) { return Response.error(new ParseError(je)); } } }