OkHttp 网络请求一直爆出网络超时, time out

  • 下面是我代码的示例:
  • 一个是 http 请求一个是 https 请求,http 请求一直爆出网络超时。因为我们做的是仓库管理员店铺扫码,上传。可能网络比较差或者上传数据过多,经常遇到网络超时,time out。
OkHttpClient client = new OkHttpClient();
       client.setConnectTimeout(10, TimeUnit.MINUTES);
    client.setWriteTimeout(10, TimeUnit.MINUTES);
    client.setReadTimeout(10, TimeUnit.MINUTES);


/**
* https请求必须加上证书
 */
if (url.contains("https")){
// 添加 SSLSocketFactory,解决可能出现的EOF错误问题
client.setSslSocketFactory(getSSLSocketFactory());
//https 请求,要加setClient(new OkClient(client))
restAdapter = new RestAdapter.Builder().setCharset(charset).setLogLevel(LogLevel.FULL).setEndpoint(url).setClient(new OkClient(client)).build();

}else{
//正常 http 请求,要加setClient(new OkClient(client))
restAdapter = new RestAdapter.Builder().setCharset(charset).setLogLevel(LogLevel.FULL).setEndpoint(url).setClient(new OkClient(client)).build();
}

  • 下面是 okHttp 源码:
public class OkClient extends UrlConnectionClient {
    private final OkUrlFactory okUrlFactory;

    private static OkHttpClient generateDefaultOkHttp() {
        OkHttpClient client = new OkHttpClient();
        client.setConnectTimeout(15000L, TimeUnit.MILLISECONDS);
        client.setReadTimeout(20000L, TimeUnit.MILLISECONDS);
        return client;
    }

    public OkClient() {
        this(generateDefaultOkHttp());
    }

    public OkClient(OkHttpClient client) {
        this.okUrlFactory = new OkUrlFactory(client);
    }

    protected HttpURLConnection openConnection(Request request) throws IOException {
        return this.okUrlFactory.open(new URL(request.getUrl()));
    }
}
  • 从源码看出,connect timeout 默认建立连接的超时时间 是 15s
  client.setConnectTimeout(15000L, TimeUnit.MILLISECONDS);
  • 从源码看出,read timeout,默认传递数据的超时时间是 20s
client.setReadTimeout(20000L, TimeUnit.MILLISECONDS);
  • 解决:我们自定义网络连接时间和数据传输时间。通过.setClient(new OkClient(client)) 设置。

你可能感兴趣的:(OkHttp 网络请求一直爆出网络超时, time out)