排球:NetworkDispatcher.run:未处理的异常java.lang.NullPointerException
VolleyPlus : NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException
我正在尝试 运行 下面的代码:
Map<String, Object> requestMap = new HashMap<>();
Long unixTime = System.currentTimeMillis() / LONG_1000;
requestMap.put(KEY_TIME, unixTime);
JWTSigner signer = new JWTSigner(SECRET);
String token = signer.sign(requestMap);
String url = BASE_URI + "/Data/Categories?d=" + token;
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getLocalizedMessage());
}
});
RequestQueue mRequestQueue = Volley.newRequestQueue(getActivity());
mRequestQueue.add(stringRequest);
但我收到以下错误:
[6056] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
at com.android.volley.toolbox.HttpHeaderParser.parseCharset(HttpHeaderParser.java:243)
at com.android.volley.toolbox.HttpHeaderParser.parseCharset(HttpHeaderParser.java:262)
at com.android.volley.request.StringRequest.parseNetworkResponse(StringRequest.java:70)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:133)
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
我不知道有什么问题。有人可以帮忙吗?
提前致谢。
我跟踪了堆栈跟踪,我认为根本原因是 response.headers
出于某种原因在方法 parseNetworkResponse
中为 null。我会建议以下内容来确认这一点。
- 创建一个扩展
StringRequest
的 class
在此 class 中覆盖“parseNetworkResponse()”。它应该如下所示:
protected Response<String> parseNetworkResponse(NetworkResponse response) {
Log.d("Response Header = " + response.headers);
super.parseNetworkResponse(response);
}
使用这个 class 而不是 StringRequest
。
完成后,查看 headers 是否为空。那应该缩小问题的范围。顺便问一下,您使用的是哪个版本的 Volley。没遇到过这样的问题。
您需要重写 StringRequest
中的 parseNetworkResponse
方法并修复一个不预期空头映射的漏洞:
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getLocalizedMessage());
}
}) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
if (response.headers == null)
{
// cant just set a new empty map because the member is final.
response = new NetworkResponse(
response.statusCode,
response.data,
Collections.<String, String>emptyMap(), // this is the important line, set an empty but non-null map.
response.notModified,
response.networkTimeMs);
}
return super.parseNetworkResponse(response);
}
};
希望对您有所帮助。
我遇到这个问题是因为 cidEDTValue 为空。
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("CID", cidEDTValue);
return params;
}
}
我在 build.gradle.dependencies 上写了这篇文章。
compile 'com.android.volley:volley:1.0.0'
成功了。
我正在尝试 运行 下面的代码:
Map<String, Object> requestMap = new HashMap<>();
Long unixTime = System.currentTimeMillis() / LONG_1000;
requestMap.put(KEY_TIME, unixTime);
JWTSigner signer = new JWTSigner(SECRET);
String token = signer.sign(requestMap);
String url = BASE_URI + "/Data/Categories?d=" + token;
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getLocalizedMessage());
}
});
RequestQueue mRequestQueue = Volley.newRequestQueue(getActivity());
mRequestQueue.add(stringRequest);
但我收到以下错误:
[6056] NetworkDispatcher.run: Unhandled exception java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
at com.android.volley.toolbox.HttpHeaderParser.parseCharset(HttpHeaderParser.java:243)
at com.android.volley.toolbox.HttpHeaderParser.parseCharset(HttpHeaderParser.java:262)
at com.android.volley.request.StringRequest.parseNetworkResponse(StringRequest.java:70)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:133)
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
我不知道有什么问题。有人可以帮忙吗?
提前致谢。
我跟踪了堆栈跟踪,我认为根本原因是 response.headers
出于某种原因在方法 parseNetworkResponse
中为 null。我会建议以下内容来确认这一点。
- 创建一个扩展
StringRequest
的 class
在此 class 中覆盖“parseNetworkResponse()”。它应该如下所示:
protected Response<String> parseNetworkResponse(NetworkResponse response) { Log.d("Response Header = " + response.headers); super.parseNetworkResponse(response); }
使用这个 class 而不是
StringRequest
。
完成后,查看 headers 是否为空。那应该缩小问题的范围。顺便问一下,您使用的是哪个版本的 Volley。没遇到过这样的问题。
您需要重写 StringRequest
中的 parseNetworkResponse
方法并修复一个不预期空头映射的漏洞:
StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d(TAG, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, error.getLocalizedMessage());
}
}) {
@Override
protected Response<String> parseNetworkResponse(NetworkResponse response) {
if (response.headers == null)
{
// cant just set a new empty map because the member is final.
response = new NetworkResponse(
response.statusCode,
response.data,
Collections.<String, String>emptyMap(), // this is the important line, set an empty but non-null map.
response.notModified,
response.networkTimeMs);
}
return super.parseNetworkResponse(response);
}
};
希望对您有所帮助。
我遇到这个问题是因为 cidEDTValue 为空。
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("CID", cidEDTValue);
return params;
}
}
我在 build.gradle.dependencies 上写了这篇文章。
compile 'com.android.volley:volley:1.0.0'
成功了。