在 Android 应用中用 HttpClient 来请求网络数据: 抛出的异常 IOException但是 IOException 范围太大, 我想获取网络超时异常,或者 其他异常。因为要提示用户网络到底出现什么问题了,网络无连接,网络超时等等。以前做的比较粗糙,网络无连接直接用的广播监听,网络故障直接捕捉 IOException.
 
判断网络问题,还有其它方法吗,不知道各位都是怎么处理这类网络问题的? 谢谢 

解决方案 »

  1.   

    HttpClient一般捕捉这些异常
    UnknownHostException -> SocketException -> SocketTimeoutException -> IOException -> NullPointerException(httpclient 4.0.x在一些场合会出现)
      

  2.   

    推荐你使得niceday这个框架来开发网络应用
      

  3.   


    但是系统提示 IOException 已经包含了这些 异常, 我不能把所有的异常都 handle 住吧。
      

  4.   


    if(e instanceof SocketTimeoutException){
    //需要判断什么错误自己增加
    }
      

  5.   


    但是系统提示 IOException 已经包含了这些 异常, 我不能把所有的异常都 handle 住吧。
    不懂你那系统提示IOException是什么意思?出现什么异常,给什么提示,如下所示
    try {
    // your code
                } catch (UnknownHostException e) {
    // do something
                }catch (SocketException e){
    // do something
                }catch (SocketTimeoutException e){
    // do something
                } catch (IOException e) {
    // retry
                } catch (NullPointerException e) {
    // retry
                }
      

  6.   


    但是系统提示 IOException 已经包含了这些 异常, 我不能把所有的异常都 handle 住吧。
    不懂你那系统提示IOException是什么意思?出现什么异常,给什么提示,如下所示
    try {
    // your code
                } catch (UnknownHostException e) {
    // do something
                }catch (SocketException e){
    // do something
                }catch (SocketTimeoutException e){
    // do something
                } catch (IOException e) {
    // retry
                } catch (NullPointerException e) {
    // retry
                }你试过吗? 如果试过的话,应该知道我是什么意思。我也描述不了那么细,不过还是非常感谢。
      

  7.   


    但是系统提示 IOException 已经包含了这些 异常, 我不能把所有的异常都 handle 住吧。
    不懂你那系统提示IOException是什么意思?出现什么异常,给什么提示,如下所示
    try {
    // your code
                } catch (UnknownHostException e) {
    // do something
                }catch (SocketException e){
    // do something
                }catch (SocketTimeoutException e){
    // do something
                } catch (IOException e) {
    // retry
                } catch (NullPointerException e) {
    // retry
                }你试过吗? 如果试过的话,应该知道我是什么意思。我也描述不了那么细,不过还是非常感谢。
    用httpclient时,这个是经过验证的,一些开源的项目也是这么做的