【发布时间】:2016-11-13 00:56:55
【问题描述】:
我正在使用 volley 库来获取响应,大多数情况下它在某些情况下工作正常我收到上述错误,当我尝试检查浏览器时它工作正常。请提出解决此问题的建议。我正在尝试删除缓存并进行检查,即使问题仍然存在,但我不明白我在哪里做错了。
我收到以下错误
ava.lang.NullPointerException: Attempt to read from field 'byte[] com.android.volley.NetworkResponse.data' on a null object reference
at com.pcnc.bop.helpers.VolleyRequest$2.onErrorResponse(VolleyRequest.java:98)
at com.android.volley.Request.deliverError(Request.java:577)
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:101)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
这是我的 volley-request sn-p
public void requestString(final String requestName,
final String webserviceUrl,
final Map<Object, Object> requestParams, final int webMethod,
final boolean getCache) {
LogUtils.i("Sending Request", webserviceUrl);
StringRequest stringRequest = new StringRequest(webMethod,
webserviceUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
LogUtils.i("Response", response);
mRequestCompletedListener.onRequestCompleted(
requestName, true, response, null);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
String errorResponse = null;
if (getCache) {
final Cache cache = AppController.getInstance()
.getRequestQueue().getCache();
final Entry entry = cache.get(webserviceUrl);
if (entry.data != null) {
try {
errorResponse = new String(entry.data, "UTF-8");
mRequestCompletedListener
.onRequestCompleted(requestName,
true, errorResponse, null);
return;
} catch (UnsupportedEncodingException e) {
LogUtils.e(TAG, e);
}
} else {
LogUtils.e(TAG, requestName
+ " Cache does not exist");
}
}
try {
VolleyError responseError = new VolleyError(
new String(error.networkResponse.data));
LogUtils.i("ErrorResponse", responseError.getMessage());
try {
if (responseError != null) {
final JSONObject responseJson = new JSONObject(responseError.getMessage());
// Show Alert Information
errorResponse = responseJson.getString(AppConstants.MESSAGE);
}
} catch (Exception e) {
errorResponse = "Unknown";
}
} catch (Exception e) {
LogUtils.e(TAG, e);
}
mRequestCompletedListener.onRequestCompleted(
requestName, false, null,
errorResponse);
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
@SuppressWarnings("unchecked")
final Map<String, String> params = (HashMap<String, String>) requestParams
.get(VolleyRequestConstants.HTTP_PARAMS);
if (params != null) {
return params;
}
return super.getParams();
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
@SuppressWarnings("unchecked")
final Map<String, String> headers = (HashMap<String, String>) requestParams
.get(VolleyRequestConstants.HTTP_HEADERS);
if (headers != null) {
return headers;
}
return super.getHeaders();
}
@Override
public com.android.volley.Request.Priority getPriority() {
final Priority priority = (com.android.volley.Request.Priority) requestParams
.get(VolleyRequestConstants.HTTP_PRIORITY);
if (priority != null) {
return priority;
}
return super.getPriority();
}
@Override
public String getBodyContentType() {
final String contentType = (String) requestParams
.get(VolleyRequestConstants.HTTP_CONTENT_TYPE);
if (contentType != null) {
return contentType;
}
return super.getBodyContentType();
}
@Override
public byte[] getBody() throws AuthFailureError {
final byte[] body = (byte[]) requestParams
.get(VolleyRequestConstants.HTTP_BODY_CONTENT);
if (body != null) {
return body;
}
return super.getBody();
}
};
/* DefaultRetryPolicy retryPolicy = new DefaultRetryPolicy(0, -1, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
stringRequest.setRetryPolicy(retryPolicy);*/
stringRequest.setTag(requestName);
// Adding String request to request queue
AppController.getInstance().addToRequestQueue(stringRequest);
}
【问题讨论】:
-
您可能在
Manifest.xml.. 中缺少 INTERNET 权限!! -
没有权限,我已经正确提到了。在极少数情况下会出现此问题。
-
那可能是网速慢的时候出问题了..!!
-
不是在那种情况下,实际上对于某些请求有响应,而对于某些请求没有。如果我点击没有响应的服务器,如果我再次点击有响应的服务器。在这种情况下出现上述错误。
-
然后连接你的 API 管理器..!!