改造SocketTimeOutException在android的多方发送或JSON数据 [英] Retrofit SocketTimeOutException in sending multiparty or JSON data in android
本文介绍了改造SocketTimeOutException在android的多方发送或JSON数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在经过改造的lib发送Mutipart或JSON数据面临的问题。
更新接口
@Multipart
@POST(/ API / V1 /保护/ updateprofile)
无效uploadPhoto(@part(name)的字符串名称,
@part(图像)TypedFile文件,
回拨< ApiResponseModel>回电话);
适配器code
私人RESTAPI RESTAPI;
RestAdapter restAdapter =新RestAdapter.Builder()。setClient(新OkClient(getClient()))。setConverter(新GsonConverter(gson)).setRequestInterceptor(interceptor).setLogLevel(RestAdapter.LogLevel.FULL).setEndpoint(Config.baseUrl).build();
RESTAPI = restAdapter.create(RestApi.class);
错误日志发送JSON请求后生成
块引用>D /改造:---- ERROR http://www.example.com/api/v1/protected/addfriends
11月11日至5日:22:18.594 13384-15325 / com.veddislabs.plicx D /改造:java.io.InterruptedIOException将:超时
在okio.AsyncTimeout.exit(AsyncTimeout.java:258)
在okio.AsyncTimeout $ 2.read(AsyncTimeout.java:215)
在okio.RealBufferedSource.indexOf(RealBufferedSource.java:206)
在okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:153)
在com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189)
在com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
在com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676)
在com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426)
在com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371)
在com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse$c$c(HttpURLConnectionImpl.java:466)
在retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73)
在retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
在retrofit.RestAdapter $ RestHandler.invokeRequest(RestAdapter.java:321)
在retrofit.RestAdapter $ RestHandler.access $ 100(RestAdapter.java:220)
在retrofit.RestAdapter $ RestHandler $ 2.obtainResponse(RestAdapter.java:278)
在retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
在retrofit.Platform $的Android $ 2 $ 1.run(Platform.java:142)
在java.lang.Thread.run(Thread.java:856)
java.net.SocketException异常:引起插座关闭
在libcore.io.Posix.recvfromBytes(本机方法)
在libcore.io.Posix.recvfrom(Posix.java:136)
在libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
在libcore.io.IoBridge.recvfrom(IoBridge.java:513)
在java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
在java.net.PlainSocketImpl.access $ 000(PlainSocketImpl.java:46)
在java.net.PlainSocketImpl $ PlainSocketInputStream.read(PlainSocketImpl.java:240)
在okio.Okio $ 2.read(Okio.java:136)
在okio.AsyncTimeout $ 2.read(AsyncTimeout.java:211)
在okio.RealBufferedSource.indexOf(RealBufferedSource.java:206)
在okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:153)
在com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189)
在com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
在com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676)
在com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426)
在com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371)
在com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse$c$c(HttpURLConnectionImpl.java:466)
在retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73)
在retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
在retrofit.RestAdapter $ RestHandler.invokeRequest(RestAdapter.java:321)
在retrofit.RestAdapter $ RestHandler.access $ 100(RestAdapter.java:220)
在retrofit.RestAdapter $ RestHandler $ 2.obtainResponse(RestAdapter.java:278)
在retrofit.CallbackRunnable.run(CallbackRunnable.java:42)
在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573)
在retrofit.Platform $的Android $ 2 $ 1.run(Platform.java:142)
在java.lang.Thread.run(Thread.java:856)我试图增加请求超时的请求适配器
私人OkHttpClient getClient(){
OkHttpClient客户端=新OkHttpClient();
client.setConnectTimeout(30,TimeUnit.SECONDS);
client.setReadTimeout(30,TimeUnit.SECONDS);
返回客户端;
}
解决方案我前几天有这样的错误,我发现您的解决方案是正确的,但增加更多的时间
私人OkHttpClient getClient(){
OkHttpClient客户端=新OkHttpClient();
client.setConnectTimeout(5,TimeUnit.MINUTES);
client.setReadTimeout(5,TimeUnit.MINUTES);
返回客户端;
}Facing problem in sending a Mutipart or JSON data through retrofit lib
Retrofit Interface
@Multipart @POST("/api/v1/protected/updateprofile") void uploadPhoto(@Part("name") String name, @Part("image") TypedFile file, Callback<ApiResponseModel> callback);
Adapter Code
private RestApi restApi; RestAdapter restAdapter = new RestAdapter.Builder().setClient(new OkClient(getClient())).setConverter(new GsonConverter(gson)).setRequestInterceptor(interceptor).setLogLevel(RestAdapter.LogLevel.FULL).setEndpoint(Config.baseUrl).build(); restApi = restAdapter.create(RestApi.class);
Error Log Generated after sending JSON request
D/Retrofit﹕ ---- ERROR http://www.example.com/api/v1/protected/addfriends 11-05 11:22:18.594 13384-15325/com.veddislabs.plicx D/Retrofit﹕ java.io.InterruptedIOException: timeout at okio.AsyncTimeout.exit(AsyncTimeout.java:258) at okio.AsyncTimeout$2.read(AsyncTimeout.java:215) at okio.RealBufferedSource.indexOf(RealBufferedSource.java:206) at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:153) at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189) at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:466) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278) at retrofit.CallbackRunnable.run(CallbackRunnable.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at retrofit.Platform$Android$2$1.run(Platform.java:142) at java.lang.Thread.run(Thread.java:856) Caused by: java.net.SocketException: Socket closed at libcore.io.Posix.recvfromBytes(Native Method) at libcore.io.Posix.recvfrom(Posix.java:136) at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164) at libcore.io.IoBridge.recvfrom(IoBridge.java:513) at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) at okio.Okio$2.read(Okio.java:136) at okio.AsyncTimeout$2.read(AsyncTimeout.java:211) at okio.RealBufferedSource.indexOf(RealBufferedSource.java:206) at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:153) at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189) at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101) at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371) at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:466) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321) at retrofit.RestAdapter$RestHandler.access$100(RestAdapter.java:220) at retrofit.RestAdapter$RestHandler$2.obtainResponse(RestAdapter.java:278) at retrofit.CallbackRunnable.run(CallbackRunnable.java:42) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at retrofit.Platform$Android$2$1.run(Platform.java:142) at java.lang.Thread.run(Thread.java:856)
I have tried to increase the timeout of the request in Request Adapter
private OkHttpClient getClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(30, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS); return client; }
解决方案I have this error a few days ago and I discovered that your solution is correct but add more time
private OkHttpClient getClient() { OkHttpClient client = new OkHttpClient(); client.setConnectTimeout(5, TimeUnit.MINUTES); client.setReadTimeout(5, TimeUnit.MINUTES); return client; }
这篇关于改造SocketTimeOutException在android的多方发送或JSON数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文