okHttp的请求超时以后,连续发送5次请求后就不能再发送请求了
2016-05-16 10:30
633 查看
项目之中遇到了OkHttp 请求超时以后就不能发送请求了,
解决办法是在onFail的里面再添加一下HttpClient.mOkHttpClient = new OkHttpClient();
public void onFailure(Call call, IOException e) {
HttpClient.mOkHttpClient = new OkHttpClient();
callback.onFailure(call,e);
}
我觉得的我们团队的Dorme是非常棒的,我的思路是想它怎么会5次以后就不能访问了,我一直以为是okHttp的问题
Dorme的思路是考虑怎么我们之前的new OkHttpClient()没有执行,然后在哪里增加了一个记录发现果然没有执行,那么就增加了一个断电看看到底怎么执行的最后发现调用的地方原来不是之前的地方是别的地方就是下面的这个onFailure里面。
我需要把这样的思路给get了。感谢Dorme。
我觉得的我们团队的Dorme是非常棒的,我的思路是想它怎么会5次以后就不能访问了,我一直以为是okHttp的问题
Dorme的思路是考虑怎么我们之前的new OkHttpClient()没有执行,然后在哪里增加了一个记录发现果然没有执行,那么就增加了一个断电看看到底怎么执行的最后发现调用的地方原来不是之前的地方是别的地方就是下面的这个onFailure里面。
我需要把这样的思路给get了。感谢Dorme。
反思一下:其实我是过分的依赖网络了,因为我相信我遇到的问题别人一定也遇到了,所以我才没有深入的去debug,而是去上网查询,下一次再遇到这样给的事情,首先自己先debug,然后看看能不能在网上找到答案,一小段时间没有找到的话自己再debug。加油。。。
解决办法是在onFail的里面再添加一下HttpClient.mOkHttpClient = new OkHttpClient();
public void onFailure(Call call, IOException e) {
HttpClient.mOkHttpClient = new OkHttpClient();
callback.onFailure(call,e);
}
package com.wbm.app.business.net; import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.wbm.app.commons.Result; import com.wbm.app.commons.ResultList; import com.wbm.app.utils.DateUtil; import java.io.IOException; import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; import okhttp3.Call; import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; /** * Created by shiang on 16-1-21. */ public class BopHttpClient { private final static String APP_KEY ="500mi-cashier"; public final static String EMPTY_SESSION="EMPTY_SESSION"; /** * 调用java后端服务 * @param domain * @param method * @param map * @param callback */ public static void callHttpMethod(String domain,String method,String session, Map<String,String> map, final Callback callback){ FormBody.Builder bodyBuilder = new FormBody.Builder() .add("method", method).add("session",session) .add("timestamp", DateUtil.formateDate(new Date())).add("app_key",APP_KEY) .add("format","json"); if(map!=null && map.size()>0){ for(Map.Entry<String,String> entry:map.entrySet()){ bodyBuilder.add(entry.getKey(),entry.getValue()); } } FormBody requestBody = bodyBuilder.build(); //创建一个Request final Request request = new Request.Builder() .url("http://"+domain+":8080/gateway/api").post(requestBody) .build(); Call call = HttpClient.mOkHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { //TODO HttpClient.mOkHttpClient = new OkHttpClient(); callback.onFailure(call,e); } @Override public void onResponse(Call call, Response response) throws IOException { //TODO callback.onResponse(call,response); } }); } public static <K,T extends Result<K>> void callHttpMethod4Result(String domain,String method,String session, Map<String,String> map, final WrapCallback<T> callback,final K k){ callHttpMethod(domain,method, session,map,new Callback() { @Override public void onFailure(Call call, IOException e) { HttpClient.mOkHttpClient = new OkHttpClient(); callback.onFailure(call,e); } @Override public void onResponse(Call call, Response response) throws IOException { try { String responseStr = response.body().string(); if (response.code() >= 200 && response.code() < 300) { Result<K> responseObject = JSON.parseObject(responseStr, new TypeReference<Result<K>>() { }); if (responseObject.getData() != null) { K valueObject = null; Class<?> targetType= k.getClass(); if (targetType == String.class) { valueObject = (K)responseObject.getData().toString(); } else if ((targetType == Integer.class) || (targetType == Integer.TYPE)) valueObject = (K)Integer.valueOf(responseObject.getData().toString()); else if ((targetType == Byte.class) || (targetType == Byte.TYPE)) valueObject = (K)Byte.valueOf(responseObject.getData().toString()); else if ((targetType == Double.class) || (targetType == Double.TYPE)) valueObject = (K)Double.valueOf(responseObject.getData().toString()); else if ((targetType == Float.class) || (targetType == Float.TYPE)) valueObject = (K)Float.valueOf(responseObject.getData().toString()); else if ((targetType == Long.class) || (targetType == Long.TYPE)) valueObject = (K)Long.valueOf(responseObject.getData().toString()); else if ((targetType == Short.class) || (targetType == Short.TYPE)) valueObject = (K)Short.valueOf(responseObject.getData().toString()); else if (targetType == BigDecimal.class ) valueObject = (K)new BigDecimal(responseObject.getData().toString()); else{ valueObject = (K) JSONObject.toJavaObject((JSONObject) responseObject.getData(), k.getClass()); } responseObject.setData(valueObject); } callback.onResponse(call, (T) responseObject); } else { // Result<K> responseObject = new Result<K>(); // responseObject.setError(ErrorCodeConstants.SYSTEMERROR_999999.getErrorCode(), ErrorCodeConstants.SYSTEMERROR_999999.getErrorName(), ErrorCodeConstants.SYSTEMERROR_999999.getErrorMessage()); // callback.onResponse(call, (T) responseObject); onFailure(call,new IOException()); } }catch (Throwable e){ // throw e; onFailure(call,new IOException(e)); } } }); } public static <K,T extends ResultList<K>> void callHttpMethod4ResultList(String domain,String method,String session, Map<String,String> map, final WrapCallback<T> callback,final K k){ callHttpMethod(domain,method, session,map,new Callback() { @Override public void onFailure(Call call, IOException e) { <strong><span style="color:#33cc00;"> </span><span style="color:#ff6666;"> HttpClient.mOkHttpClient = new OkHttpClient();</span></strong> callback.onFailure(call,e); } @Override public void onResponse(Call call, Response response) throws IOException { try { String responseStr = response.body().string(); if (response.code() >= 200 && response.code() < 300) { ResultList<K> responseObject = JSON.parseObject(responseStr, new TypeReference<ResultList<K>>() { }); if (responseObject.getDatalist() != null) { String valueString = JSON.toJSONString(responseObject.getDatalist()); List<K> values = (List<K>) JSON.parseArray(valueString, k.getClass()); responseObject.setDatalist(values); } callback.onResponse(call, (T) responseObject); } else { onFailure(call,new IOException()); } }catch (Throwable e){ onFailure(call,new IOException(e)); } } }); } }
我觉得的我们团队的Dorme是非常棒的,我的思路是想它怎么会5次以后就不能访问了,我一直以为是okHttp的问题
Dorme的思路是考虑怎么我们之前的new OkHttpClient()没有执行,然后在哪里增加了一个记录发现果然没有执行,那么就增加了一个断电看看到底怎么执行的最后发现调用的地方原来不是之前的地方是别的地方就是下面的这个onFailure里面。
我需要把这样的思路给get了。感谢Dorme。
我觉得的我们团队的Dorme是非常棒的,我的思路是想它怎么会5次以后就不能访问了,我一直以为是okHttp的问题
Dorme的思路是考虑怎么我们之前的new OkHttpClient()没有执行,然后在哪里增加了一个记录发现果然没有执行,那么就增加了一个断电看看到底怎么执行的最后发现调用的地方原来不是之前的地方是别的地方就是下面的这个onFailure里面。
我需要把这样的思路给get了。感谢Dorme。
反思一下:其实我是过分的依赖网络了,因为我相信我遇到的问题别人一定也遇到了,所以我才没有深入的去debug,而是去上网查询,下一次再遇到这样给的事情,首先自己先debug,然后看看能不能在网上找到答案,一小段时间没有找到的话自己再debug。加油。。。
相关文章推荐
- IOS9.0不支持http访问
- Android开发请求网络方式详解
- iOS网络层架构设计分享
- TCP与UDP的区别
- TCP的粘包解析
- 用 Retrofit 2 简化 HTTP 请求
- HTTP in iOS你看我就够(转)
- objective-c - 基础篇 - 数据库网络 -- Core Data数据库持久化
- theano学习指南5(翻译)- 降噪自动编码器
- theano学习指南4(翻译)- 卷积神经网络
- httpd无法启动
- 20159311《网络攻击与防范》第十一周学习总结
- Caffe 抽取CNN网络特征 Python
- HTTP HSTS协议和 nginx
- 【网络协议】TCP分段与IP分片
- TCP之————三次握手和四次挥手
- 网络爬虫基本原理
- 卷积神经网络模型如何辨识裸体图片
- httpUtils获取网络信息解析xml
- Android中OKHttp框架的使用