当我只用Volley提出请求时一切顺利,我的StringRequest转到onResponse。
但是,当我切换到Volley + Okhttp组合时,我的请求通过,我收到与以前相同的响应,但后来我收到以下错误消息:
E/Volley﹕ [122319] BasicNetwork.performRequest: Unexpected response code 200 for <my request url>
java.io.IOException: closed
com.android.volley.NetworkError: java.io.IOException: closed
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:182)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
Caused by: java.io.IOException: closed
at okio.RealBufferedSource$1.read(RealBufferedSource.java:345)
at java.io.InputStream.read(InputStream.java:162)
at com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:254)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:130)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:114)
我正在使用这个qazxsw poi为我的OkHttp Stack for Volley。
我没有太多时间去调查,但是在使用通过代理(Charles)连接的模拟器时遇到了同样的问题。对我来说,当我在没有代理或设备的情况下进行测试时,问题就会消失。
当使用RequestQueue的start和stop方法时,我发生了同样的问题。在许多流行的博客中都指出,当用户投掷时应该停止RequestQueue以确保没有抽搐。但是,当您调用stop时,所有RequestQueue的请求都会被停止,即使是那些已经在进行网络调用的请求也是如此。当这些请求被初步停止时,会发生上述异常。没有调用停止功能解决了我的问题。
对于那些使用代理(在我的情况下是Charles)的人,除了在设置中配置代理之外,还需要在Android模拟器中配置您的代理。
所以,这是我在Settings Emulator中的配置
https://gist.github.com/bryanstern/4e8f1cb5a8e14c202750
这是在Android Emulator中使用wifi配置代理的步骤