Android 截击 EOFException
Android Volley EOFException
我有一个像这样使用 volley 的简单应用程序:
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("VolleyController", "Received volley response: " + response);
callback.onCallback(OperationOutcome.SUCCESS, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// This is null.
NetworkResponse response = error.networkResponse;
Log.e("VolleyManager", "Received error response from volley: ", error );
callback.onCallback(OperationOutcome.FAILURE, null);
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
这是我得到的异常:
Received error response from volley: com.android.volley.NoConnectionError: java.io.EOFException
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:151)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
Caused by: java.io.EOFException
at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:98)
at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:202)
at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:119)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:798)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:405)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:349)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:517)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
我在网上找到了一些关于这个的其他答案,但他们没有解决。请求未到达服务器。
非常感谢。
编辑
我对清单有两个权限:
<uses-permission android:name="android.permission.INTERNET" />
并且互联网在设备上运行良好。
您的设备上是否启用了互联网?
您是否在清单中设置了 INTERNET 权限?
编辑:
检查你的 URL 是否正确。
问题是因为我发送的请求是空的。我认为 Volley 会自行将其转换为正确的 JSON 表示形式 ({}
)。相反,我认为请求只是一个 null
,这导致了异常。为了解决这个问题,我更改了 JSONObjectRequest
中的 StringRequest
。这有一个构造函数,它将 JSONObject
作为输入,如下所示:
// This will instantiate an empty JSON request with the correct format.
new JSONObject("{}");
我仍然不明白为什么 Volley 不能自己做,我只是出于好奇想了解一下。无论如何,在此之后,我决定切换到性能更高且设置更简单的 Retrofit。
谢谢大家的帮助!
我有一个像这样使用 volley 的简单应用程序:
StringRequest stringRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("VolleyController", "Received volley response: " + response);
callback.onCallback(OperationOutcome.SUCCESS, response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// This is null.
NetworkResponse response = error.networkResponse;
Log.e("VolleyManager", "Received error response from volley: ", error );
callback.onCallback(OperationOutcome.FAILURE, null);
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
这是我得到的异常:
Received error response from volley: com.android.volley.NoConnectionError: java.io.EOFException
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:151)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
Caused by: java.io.EOFException
at com.android.okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:98)
at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:202)
at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:119)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:798)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:405)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:349)
at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:517)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:110)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:96)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
我在网上找到了一些关于这个的其他答案,但他们没有解决。请求未到达服务器。
非常感谢。
编辑
我对清单有两个权限:
<uses-permission android:name="android.permission.INTERNET" />
并且互联网在设备上运行良好。
您的设备上是否启用了互联网? 您是否在清单中设置了 INTERNET 权限?
编辑:
检查你的 URL 是否正确。
问题是因为我发送的请求是空的。我认为 Volley 会自行将其转换为正确的 JSON 表示形式 ({}
)。相反,我认为请求只是一个 null
,这导致了异常。为了解决这个问题,我更改了 JSONObjectRequest
中的 StringRequest
。这有一个构造函数,它将 JSONObject
作为输入,如下所示:
// This will instantiate an empty JSON request with the correct format.
new JSONObject("{}");
我仍然不明白为什么 Volley 不能自己做,我只是出于好奇想了解一下。无论如何,在此之后,我决定切换到性能更高且设置更简单的 Retrofit。
谢谢大家的帮助!