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

最后祝大家都成为大牛。~~~


posted @ 2017-06-04 10:25  lytwajue  阅读(1165)  评论(0编辑  收藏  举报