在 Volley 的 onErrorResponse 侦听器中处理 401 错误

Handle a 401 error in Volley's onErrorResponse listener

我正在使用 Volley 的 JsonObjectRequest 从 Web 服务器获取 JSON 数据。基本上我的代码是这样的:

JsonObjectRequest jsonRequest = new JsonObjectRequest("https://www.example.com", null, new Response.Listener<JSONObject>() {
    @Override
    public void onResponse(JSONObject response) {
        ...
    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
        if (error.networkResponse.statusCode == 401) {
            // Show toast message saying "Access unauthorized"
        } else {
            // show toast message saying "Could not fetch"
        }
    }
});

如果请求因 401 错误而失败,则会按预期显示“未经授权访问”提示消息。但是,如果请求由于某种原因(例如没有互联网)而失败,应用程序会崩溃并抛出 NullPointerException,因为 networkResponse 不存在于 error.

如何正确处理这两种失败原因?

您可以通过以下任一方式处理此问题,

  1. 处理您的应用程序中丢失的互联网信号并导航到不同的页面(搜索如何处理没有互联网,有很多可用的文章)

  2. 在 try catch 中围绕 JsonObjectRequest 调用并自行处理异常