我使用AS开发一个软件,将一些信息自动转发到服务器端,使用的是HttpsURLConnection,在使用中发现,如果网络连接不好或没有网络,那么软件就会异常退出,既不执行超时时间,也没办法捕获异常。
我是想,如果发送不成功时,延时再重试或给出手动处理提示,可是没办法捕获异常,所以也处理不了。关键是逻辑上想不通。求教了~

解决方案 »

  1.   

    我觉得你可以用第三方框架试试OkHttp3,我这里做了个DEMO http://download.csdn.net/download/xj396282771/9884999,就很好的解决了你说的网络不好,连接超时无反应的情况
      

  2.   

    try {
    URL url = new URL(weburl);
    HttpsURLConnection httpURLConnection = (HttpsURLConnection) url.openConnection(); SSLContext sc;
    sc = SSLContext.getInstance("TLS");
    sc.init(null, null, new java.security.SecureRandom()); httpURLConnection.setSSLSocketFactory(sc.getSocketFactory());
    httpURLConnection.setReadTimeout(7000);
    httpURLConnection.setConnectTimeout(7000);
    httpURLConnection.setDoInput(true);
    httpURLConnection.setDoOutput(true);
    httpURLConnection.setUseCaches(false);
    httpURLConnection.setRequestMethod("POST");
    httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
    httpURLConnection.setRequestProperty("Charset", "UTF-8");
    httpURLConnection.setRequestProperty("Content-Type", "application/json");
    httpURLConnection.setRequestProperty("Accept", "application/json"); httpURLConnection.connect();就是到这之后就不行了
    运行时出现出现的记录是:
    09-29 13:58:22.852 3864-3864/om.dx.util I/System.out: 网络发送开始1
    09-29 13:58:32.905 3864-3870/om.dx.util I/zygote: Thread[3,tid=3870,WaitingInMainSignalCatcherLoop,Thread*=0xb2b5ac00,peer=0x12cc0290,"Signal Catcher"]: reacting to signal 3
    09-29 13:58:33.007 3864-3870/om.dx.util I/zygote: Wrote stack traces to '/data/anr/traces.txt'10S超时,无论上面设置多少,这个位置都一样。弄不明白呀~~
      

  3.   

    确实能够解决了,我现在用的是httpsURLConnection,因为软件一直用着,暂时不想调整,计划看看能不能在这上完善下。
    不过还没看明白,本人小白一个~~
      

  4.   

    ANR了,你主线程放了什么耗时操作了?不会是网络请求没有放到子线程吧?
      

  5.   

    这是我研究的第一个Adroid程序,呵呵,小白
    我再研究研究
      

  6.   

    听大家的建议,给连接这块重新建立一个新的线程,果然能够Catch到异常了,呵呵
    不过现在要等大概6个我设定的超时时间才会有反应。