您的位置:首页 > 移动开发 > Android开发

出现连接超时SocketTimeoutException后一直连接不上的

2017-01-06 15:40 513 查看

MIUI

在小米中出现这个异常会有一句日志:

com.miui.networkassistant.deamon I/XiaomiFirewall: firewall pkgName:com.xxxxx.xxxxxx, result:0x0


关闭神隐模式就好了~!

下面的不确定有没有用/(ㄒoㄒ)/~~

需求频繁的上传数据,本来使用HttpClient上传数据,每次上传一段时间就会出现连接超时的问题,然后后续的请求统统都是连接超时。后来换了okhttp3.5还是一样的问题。不明白了。ios好好的,用的公司wifi,绑不绑电脑ip代理都会出现,而且只是个别手机出现。基本上运行一个小时才会出现,调试好费时间的。下面是我的解决方法,我也不知道为啥。很简陋

我的OKhttpClient是这样的,默认10秒。改不改都行吧,测试一次得几个小时,很浪费时间,没有一个一个测试。

okHttpClient=new OkHttpClient.Builder()
.connectTimeout(90, TimeUnit.SECONDS)
.readTimeout(90,TimeUnit.SECONDS)
.build();


我的request是这样的,改了个头部,不知道有没有影响

request = new okhttp3.Request.Builder()
.url(url)
.addHeader("Connection", "close")
.build();


对于异步的,失败后清除连接请求和连接池,新建连接请求

Call call= okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
okHttpClient.dispatcher().cancelAll();
okHttpClient.connectionPool().evictAll();
okHttpClient.newCall(request).enqueue(this);

}

@Override
public void onResponse(Call call, Response response) throws IOException {
Log.i(TAG, "okhttp onResponse: "+response.body().string()+"caseid= "+caseid);
deletImage(cutScreenPath);
}
});


对于同步的,在catch中捕获到SocketTimeoutException 异常后,清除连接请求和连接池,重新建立连接请求

try {
Response response=  okHttpClient.newCall(request).execute();
String result = response.body().string();
} catch (JSONException e) {
e.printStackTrace();
} catch (SocketTimeoutException e) {
Log.i(TAG, "ontask rerun: "+e.getCause());
okHttpClient.dispatcher().cancelAll();
okHttpClient.connectionPool().evictAll();
//TODO: 重新请求
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 调试 TimeOut
相关文章推荐