改造SocketTimeOutException在android的多方发送或JSON数据 [英] Retrofit SocketTimeOutException in sending multiparty or JSON data in android

查看:1119
本文介绍了改造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 $的Andr​​oid $ 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 $的Andr​​oid $ 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆