http自己定义超时检測方法、主动抛出异常
上次为了解决无网路由器超时的问题,将问题重心转移到了HttpClient、 HttpUrLConnection上面,什么各种设置ReadTimeout、 connectionTimeOut,还有所谓的HttpParameters,最后均以失败告终。我也去网上搜了好多类似的东西。也见到非常多人这类问题的解决方式,但是都没有看到真正的解决方法。后来。。
好了,废话不多说直接上代码。
class BaiduHttpCallable implements Callable<Boolean> {
private GetUrlFromServerCallBack listener;
BaiduHttpCallable(GetUrlFromServerCallBack listener) {
this.listener = listener;
}
@Override
public Boolean call() throws Exception {
HttpURLConnection conn = null;
try {
URL url = new URL("http://www.baidu.com");
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
conn.connect();
int responseCode = conn.getResponseCode();
if (responseCode == 200) {
listener.onRequestSuccess("wocao");
} else {
listener.onNetError();
}
} catch (Exception e) {
listener.onNetError();
}
Log.e("luomz", "over");
return true;
}
public static void testConnection(GetUrlFromServerCallBack listener) {
FutureTask<Boolean> testConnectionTask = new FutureTask<Boolean>(new BaiduHttpCallable(listener));
new Thread(testConnectionTask).start();
try {
testConnectionTask.get(1, TimeUnit.SECONDS);
} catch (Exception e) {
//do something
Log.e("luomz", "time out");
listener.onNetTimeOut();
}
}
public interface GetUrlFromServerCallBack {
public void onNetError();
public void onNetTimeOut();
public void onRequestSuccess(String result);
}
上面的红色部分事实上是最中心的处理办法。利用FutureTask的堵塞检索主动抛出异常来解决本质问题。
近期身体不太好 头有点晕,语言组织的相当粗糙,只是能解决这个问题才是最重要的。
事实上那些setTimeOut之类的能够捕获到异常。可是前提能过一个域名检測的阶段(无网路由器就是过不了这里才一直堵塞导致你设置的超时方法无效)
鄙人也是刚入android半年,希望有问题大家一起学习,一起交流。
本人新建QQ群 99185354 期待技术男一起共同进步!
測试demo也不用给了,就直接调用里面的静态方法就能够了,这仅仅是提供一个思路。假设多线程同期监控的话 最好加上synchronized。
最后祝大家都成为大牛。~~~
http自己定义超时检測方法、主动抛出异常的更多相关文章
- Matlab人脸检測方法(Face Parts Detection)具体解释
今天同学让我帮忙制作一个人脸表情识别的样本库,当中主要是对人脸进行裁剪,这里用到了一个相对较新的Matlab人脸检測方法Face Parts Detection.网上百度了一下发现关于Matlab人脸 ...
- cocos2d-html5 碰撞检測的几种方法
游戏中的碰撞还是比較多的,比方角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都须要 进行碰撞的检測,来触发一定的事件 近期在尝试制作一个小游戏的时候须要用到碰撞检測,然后就查了下资料,并在论 ...
- 【从零学习openCV】IOS7下的人脸检測
前言: 人脸检測与识别一直是计算机视觉领域一大热门研究方向,并且也从安全监控等工业级的应用扩展到了手机移动端的app,总之随着人脸识别技术获得突破,其应用前景和市场价值都是不可估量的,眼下在学习ope ...
- C++内存泄露检測原理
转自:http://hi.baidu.com/jasonlyy/item/9ca0cecf2c8f113a99b4981c 本文针对 linux 下的 C++ 程序的内存泄漏的检測方法及事实上现进行探 ...
- HTML5特性检測
HTML5特性检測: 1.检測全局对象:诸如window或navigator是否拥有特定的属性 2.创建元素:检測该元素的DOM对象是否拥有特定的属性 3.创建元素:检測该元素的DO ...
- 图像边缘检測--OpenCV之cvCanny函数
图像边缘检測--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1 ...
- Cocos2d-x教程(34)-三维物体OBB碰撞检測算法
欢迎增加Cocos2d-x 交流群:193411763 个中心点.1个旋转矩阵和3个1/2边长(注:一个旋转矩阵包括了三个旋转轴,若是二维的OBB包围盒则是一个中心点,两个旋转轴,两个1/2边长). ...
- 目标检測的图像特征提取之(一)HOG特征
1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检測的特征描写叙述子.它通过计算和统计图像局部区 ...
- 行人检測之HOG特征(Histograms of Oriented Gradients)
之前的文章行人计数.计次提到HOG特征这个概念,这两天看了一下原版的论文,了解了一下HOG特征的原理,并依据自己的理解将这种方法的流程写了下来,假设有不正确的地方欢迎指正. HOG(Histogram ...
随机推荐
- “浪潮杯”第九届山东省ACM大学生程序设计竞赛重现赛 C-Cities
题目描述:There are n cities in Byteland, and the ith city has a value ai. The cost of building a bidirec ...
- 多重背包(MultPack = ZeroOnePack + CompletePack)
HiHoCoder_offer6_04 题目4 : 奖券兑换 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi在游乐园中获得了M张奖券,这些奖券可以用来兑换奖品. ...
- OFDM同步算法之Minn算法
minn算法代码 算法原理 训练序列结构 T=[B B -B -B],其中B表示由长度为N/4的复伪随机序列PN,ifft变换得到的符号序列 (原文解释):B represent samples of ...
- 使用XUL开发跨平台桌面应用
先上图: 现在使用html,css,js开发桌面的优势越来越明显了,硬件性能的不断提升,人力成本越发昂贵,用户对界面要求越来越高,全球化下企业间的竞争越发激烈. 桌面软件50%+的工作量都在界面开发这 ...
- Android基于HttpUrlConnection类的文件下载
/** * get方法的文件下载 * <p> * 特别说明 android中的progressBar是google唯一的做了处理的可以在子线程中更新UI的控件 * * @param pat ...
- sql中表变量
今天在公司看sql优化的文章的时候,提到了表变量,做下笔记. 表变量 顺便复习下临时表.
- SQL server 2005中无法新建作用(Job)的问题
1.在使用sqlserver2005创建作业时,创建不了,提示 无法将类型为“Microsoft.SqlServer.Management.Smo.SimpleObjectKey”的对象强制转换为类型 ...
- 大神所写的深度好文---Gradle 构建工具
什么是构建工具? 我们大家都知道 Gradle 是一种构建工具,那么什么是构建工具呢? 网上一大堆的文字解释我觉得很难理解,这里我以咱们 Android 开发来举个例子吧. 我们以前开发都是用 Ecl ...
- 通过PHP怎样取到android系统下apk应用的包名,版本号等信息
公司项目关系,要求在通过PHP解析android系统应用apk包内的一切可用的信息.比如说:APK包名,版本号,版本名,安装权限等一系列关于对应包的信息.通过google查找相关的解决方案,都没有找到 ...
- eclipse版本和jdk的版本兼容问题
eclipse也是有版本的,当版本过低时,无法兼容高版本的jdk 项目中用的是jdk1.8,但是低版本的eclipse只能选到jdk1.7,导致java文件在编译的过程中,不识别1.8版本jdk的语法 ...