【问题标题】:How to get the network error response message from server side using Volley library?如何使用 Volley 库从服务器端获取网络错误响应消息?
【发布时间】:2016-07-23 20:27:32
【问题描述】:

我正在尝试从服务器端获取 HTTP 状态代码,例如 400、401 或 500。我尝试了下面的代码,但消息是null

new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        Log.e("error fetched/////", "" + error.toString());
        // listener.onError(error.toString());
        String json = null;
        NetworkResponse response = error.networkResponse;
        int errcode = error.networkResponse.statusCode;

        Log.e("errcode","errcode"+error.networkResponse.toString());

        Log.e("HttpStatus", String.valueOf(errcode));

        if(HttpStatus.SC_SWITCHING_PROTOCOLS==error.networkResponse.statusCode){
            Log.e("HttpStatus","HttpStatus");
        }
        if (response != null && response.data != null) {
            switch (response.statusCode) {
                case 400:
                    json = new String(response.data);
                    json = trimMessage(json, "message");
                    listener.onError(error.toString());
                    Log.e("listenerpost", "listenerpost" + error.getMessage());
                    break;

                case 401:
                    json = new String(response.data);
                    json = trimMessage(json, "message");
                    listener.onError(error.toString());
                    Log.e("listener1", "listener" + error.networkResponse.toString());
                    break;

                case 500:
                    json = new String(response.data);
                    json = trimMessage(json, "message");
                    listener.onError(error.toString());
                    Log.e("listener500", "listener500" + error.networkResponse.toString());
            }
            //Additional cases
        }
    }
})

请帮我解决这个问题。

【问题讨论】:

  • 您从中得到的响应是什么:Log.e("errcode","errcode"+error.networkResponse.toString());
  • errcode com.android.volley.NetworkResponse@1b5fef4b 这是对此的响应。 @djodjo
  • 可以在“ json = new String(response.data); ”之后记录json,并且你可以粘贴你的trimMessage,因为它似乎存在问题
  • 也可以通过“得到消息为空”。你的意思是“json”变量还是别的什么?
  • Log.e("listenerpost", "listenerpost" + error.getMessage());在这里我收到了空消息。

标签: android web-services android-volley android-networking android-webservice


【解决方案1】:

问题是你试图得到

error.getMessage()

虽然这对于您正在尝试的错误为 null,因为 BasicNetwork 确实:

else if (statusCode >= 400 && statusCode <= 499) {
                        // Don't retry other client errors.
                        throw new ClientError(networkResponse);
                    } else if (statusCode >= 500 && statusCode <= 599) {
                        if (request.shouldRetryServerErrors()) {
                            attemptRetryOnException("server",
                                    request, new ServerError(networkResponse));
                        } 

基本上错误只是一个异常类,并且没有设置 ClientError 和 ServerError 的消息。

来自服务器的错误信息在

error.networkResponse

你获取它的方式应该是从服务器获取消息

json = new String(response.data);

【讨论】:

    【解决方案2】:

    重写此方法:

    @Override
    protected Response<byte[]> parseNetworkResponse(NetworkResponse response) {
          // Here is what you need!
          response.statuscode;
    }
    

    【讨论】:

    • 抱歉,您可以删除该行。复制粘贴.. :D
    猜你喜欢
    • 2015-07-25
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    相关资源
    最近更新 更多