如何获得即使状态码不是200的网络响应

时间:2019-03-15 10:32:58

标签: android android-volley

我使用API​​进行登录,如果登录成功,则返回带有响应的代码200。并且如果不正确的电子邮件或密码将返回带有json对象的代码401包含错误 问题是,即使图像中的请求代码不等于200,我也想获得网络响应,例如图像postman response

但是凌空抛出异常 this.state = { events:this.props.eventData.events, } static getDerivedStateFromProps(nextProps, prevState){ if(nextProps.eventData.events!==prevState.events){ return { events: nextProps.eventData.events}; } else return null; } componentDidUpdate(prevProps, prevState) { const {eventData} = this.props; if(prevProps.eventData.events!==this.props.eventData.events){ //Perform some operation here this.setState({events: eventData.events}); this.classMethod(); } } handleClickButton = (event, action) => { const {eventData} = this.props; axios.post(configs.Data.sendEvent, {events: event, key:eventData.key, action:action})//event here is a single event .then(res=>{ this.setState({events:res.data.singleResult.dataEvent}); }); };

这是我的代码

BasicNetwork.performRequest: Unexpected response code 401

4 个答案:

答案 0 :(得分:1)

VolleyError具有networkResponse属性,其中包含响应。

这是一个示例:String response = new String(error.networkResponse.data);

答案 1 :(得分:0)

在如下所示的newRequest()方法中简单地覆盖parseNetworkResponse

StringRequest request = new StringRequest(Method.GET,
            <your url>,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    //handle response
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    //handle error
                }
            }) {

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            int mStatusCode = response.statusCode;
            return super.parseNetworkResponse(response);
        }
    };

答案 2 :(得分:0)

您可以从VolleyError中提取响应数据。

@Override
public void onErrorResponse(VolleyError error) {
   NetworkResponse networkResponse = error.networkResponse;
   if (networkResponse != null && networkResponse.data != null) {
   String jsonError = new String(networkResponse.data);
   // Print Error!
    }
 }

答案 3 :(得分:0)

如果网络状态码不是4xx或5xx,则Volley在onErrorResponse中以VolleyError的形式返回响应。响应以字节数组形式接收,因此,您需要对其进行解析以读取错误和消息键。

下面是所需代码的修剪版本。

final String failAuthError = new String(volleyError.networkResponse.data, Charset.forName("UTF-8"));
ErrorResponse errorResponse = new Gson().fromJson(failAuthError, ErrorResponse.class);
Log.e(TAG, "Error Status: " + errorResponse.error);
Log.e(TAG, "Error Message: " + errorResponse.message);

ErrorResponse是具有errormessage变量的自定义类。

class ErrorResponse {
    @Expose
    @SerializedName("error")
    String error;

    @Expose
    @SerializedName("message")
    String message;
}