Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在android中发送多方或JSON数据时改进SocketTimeOutException大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
通过改造lib发送Mutipart或 JSON数据时遇到问题

改造界面

@multipart
@POST("/api/v1/protected/updateprofile")
void uploadPhoto(@Part("name") String name,@Part("image") TypedFile file,CallBACk<ApiResponseModel> callBACk);

适配器代码

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);

发送JSON请求后生成错误日志

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)

我试图在request Adapter中增加请求的超时

private OkhttpClient getClient() {
        OkhttpClient client = new OkhttpClient();
        client.setConnectTimeout(30,TimeUnit.SECONDS);
        client.setReadTimeout(30,TimeUnit.SECONDS);
        return client;
    }

解决方法

我几天前有这个错误,我发现你的解决方案是正确的,但增加了更多的时间
private OkhttpClient getClient() {
    OkhttpClient client = new OkhttpClient();
    client.setConnectTimeout(5,TimeUnit.minutES);
    client.setReadTimeout(5,TimeUnit.minutES);
    return client;
}

对于Okhttp3

private OkhttpClient getClient() {
    OkhttpClient client = new OkhttpClient.builder()
    .connectTimeout(5,TimeUnit.minutES)
    .readTimeout(5,TimeUnit.minutES)
    .build();
    return client;
}

大佬总结

以上是大佬教程为你收集整理的在android中发送多方或JSON数据时改进SocketTimeOutException全部内容,希望文章能够帮你解决在android中发送多方或JSON数据时改进SocketTimeOutException所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。