Cómo obtener el código de estado en la respuesta correcta Volley Android
Me gustaría preguntar cómo obtener el código de estado cuando se utiliza Volley.
Tengo código siguiente:
- ¿Apoya Android varias solicitudes HTTP al mismo tiempo?
- Phonegap y prompt ()
- Hacer solicitud de volley en diferentes hilos
- Los anuncios de Google con varios tamaños de anuncio de DFP dan error
- Cómo comunicarse desde php a Android
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // Here I want to get status code } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } )
Es posible ? Si no, ¿por qué?
- Problema con la solicitud de Facebook en Android
- Android - cancelar solicitud de voleibol
- Enviando una solicitud POST con JSONArray usando Volley
- Android enviando solicitudes de correos a django servidor csrf fallando
- Android httprequest java.net.UnknownHostException
- ¿Hay alguna manera de cambiar el System User Agent de Genymotion Emulator?
- Uso de la biblioteca AQuery con la solicitud PUT y StringEntity (String)
- Android usb requestWait no volver
Tal vez esta clase en lugar de StringResponse:
public class NetworkResponseRequest extends Request<NetworkResponse> { private final Response.Listener<NetworkResponse> mListener; public NetworkResponseRequest(int method, String url, Response.Listener<NetworkResponse> listener, Response.ErrorListener errorListener) { super(method, url, errorListener); mListener = listener; } public NetworkResponseRequest(String url, Response.Listener<NetworkResponse> listener, Response.ErrorListener errorListener) { this(Method.GET, url, listener, errorListener); } @Override protected void deliverResponse(NetworkResponse response) { mListener.onResponse(response); } @Override protected Response<NetworkResponse> parseNetworkResponse(NetworkResponse response) { return Response.success(response, HttpHeaderParser.parseCacheHeaders(response)); } public static String parseToString(NetworkResponse response) { String parsed; try { parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); } catch (UnsupportedEncodingException e) { parsed = new String(response.data); } return parsed; } }
Uso:
NetworkResponseRequest request = new NetworkResponseRequest(Request.Method.GET, "http://example.com/test.php", new Response.Listener<NetworkResponse>() { @Override public void onResponse(NetworkResponse response) { // This is status code: response.statusCode // This is string response: NetworkResponseRequest.parseToString(response) } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } } );
No es bueno usar mi propia implementación en lugar de StringRequest. Qué piensa usted al respecto ?
Si todavía desea utilizar StringRequest
, IMO, puede hacer referencia al código de ejemplo siguiente:
public class MainActivity extends AppCompatActivity { private final Context mContext = this; private int mStatusCode = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); RequestQueue queue = Volley.newRequestQueue(this); String url = "http://google.com"; StringRequest request = new StringRequest(url, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.i("onResponse", response); Log.i("statusCode", String.valueOf(mStatusCode)); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e("onErrorResponse", error.toString()); } }) { @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { if (response != null) { mStatusCode = response.statusCode; } return super.parseNetworkResponse(response); } }; queue.add(request); } }
La respuesta de la red se puede recibir en el siguiente formato
NetworkResponse response = error.networkResponse; if(response != null && response.data != null){ switch(response.statusCode){ case 403: json = new String(response.data); json = trimMessage(json, "error"); if(json != null) displayMessage(json); break; } }