【发布时间】:2015-02-25 11:23:26
【问题描述】:
我正在开发一个应用程序,但在使用 okhttp 发出 POST 请求时遇到问题。
堆栈跟踪(okhttp):
12-29 09:29:55.829: W/System.err(1797): java.net.ProtocolException: Unexpected status line: HTTP/1.1
12-29 09:29:55.829: W/System.err(1797): at com.squareup.okhttp.internal.http.StatusLine.parse(StatusLine.java:58)
12-29 09:29:55.837: W/System.err(1797): at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189)
12-29 09:29:55.837: W/System.err(1797): at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
12-29 09:29:55.845: W/System.err(1797): at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676)
12-29 09:29:55.845: W/System.err(1797): at com.squareup.okhttp.Call.getResponse(Call.java:205)
12-29 09:29:55.845: W/System.err(1797): at com.squareup.okhttp.Call.execute(Call.java:80)
12-29 09:29:55.852: W/System.err(1797): at net.claxi.driver.misc.TaskFragment$LoginTask.doInBackground(TaskFragment.java:156)
12-29 09:29:55.852: W/System.err(1797): at net.claxi.driver.misc.TaskFragment$LoginTask.doInBackground(TaskFragment.java:1)
12-29 09:29:55.852: W/System.err(1797): at android.os.AsyncTask$2.call(AsyncTask.java:287)
12-29 09:29:55.852: W/System.err(1797): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
12-29 09:29:55.852: W/System.err(1797): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
12-29 09:29:55.860: W/System.err(1797): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-29 09:29:55.860: W/System.err(1797): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-29 09:29:55.860: W/System.err(1797): at java.lang.Thread.run(Thread.java:856)
这只发生在特定平板电脑上的 3G 上,在 Wi-Fi 上它可以在同一设备上正常工作。在其他设备上,它在 3G 和 Wi-Fi 上都能正常工作。
对于登录请求,我使用 okhttp 发出请求。对于其他请求,我使用的是 Retrofit。当我切换到使用 Rertofit 进行登录请求时,发生了一件奇怪的事情。有时它可以工作,有时它会崩溃。
使用 Retrofit 时的堆栈跟踪:
12-29 09:42:51.337: D/Retrofit(2766): ---- ERROR http://MYSERVER.com:2258/api/loginTaxi
12-29 09:42:51.352: D/Retrofit(2766): java.net.ProtocolException: Unexpected status line: HTTP/1.1
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.http.StatusLine.parse(StatusLine.java:59)
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:187)
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:78)
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:665)
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:429)
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:374)
12-29 09:42:51.352: D/Retrofit(2766): at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:469)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
12-29 09:42:51.352: D/Retrofit(2766): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-29 09:42:51.352: D/Retrofit(2766): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-29 09:42:51.352: D/Retrofit(2766): at retrofit.Platform$Android$2$1.run(Platform.java:142)
12-29 09:42:51.352: D/Retrofit(2766): at java.lang.Thread.run(Thread.java:856)
12-29 09:42:51.352: D/Retrofit(2766): ---- END ERROR
我正在使用 okhttp-2.1.0、okhttp-urlconnection-2.1.0 和 okio-1.1.0。
当删除 okhttp(使用 Retrofit 和默认的 http 客户端)
12-29 10:24:19.837: D/Retrofit(4727): java.lang.IllegalArgumentException: Invalid status code: -1
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.client.Response.<init>(Response.java:42)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:94)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
12-29 10:24:19.837: D/Retrofit(4727): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
12-29 10:24:19.837: D/Retrofit(4727): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
12-29 10:24:19.837: D/Retrofit(4727): at retrofit.Platform$Android$2$1.run(Platform.java:142)
12-29 10:24:19.837: D/Retrofit(4727): at java.lang.Thread.run(Thread.java:856)
12-29 10:24:19.837: D/Retrofit(4727): ---- END ERROR
知道发生了什么吗?
【问题讨论】: