【问题标题】:Android Connection/SocketTimeOutException caught yet app still crashAndroid Connection/SocketTimeOutException 捕获但应用程序仍然崩溃
【发布时间】:2012-12-31 15:15:22
【问题描述】:

基本上,我试图让用户知道应用程序何时无法访问服务器/服务器,而他们的手机互联网/数据连接非常好。所以我在这里按照这篇文章设置了超时:How to set HttpResponse timeout for Android in Java

效果很好,除非正确捕获异常,否则应用程序仍然崩溃,而不是显示 Toast 消息并返回应用程序屏幕。请注意,"Log.e("CONN TIMEOUT", e.toString());" 在 logcat 中正确记录为:"CONN TIMEOUT org.apache.http.conn.ConnectTimeoutException: Connect到 /192.168.11.60:80 超时"

根据要求,完整的 logcat:http://pastebin.com/rpe8iKRi

    // Making HTTP request
    try {

        HttpParams httpParameters = new BasicHttpParams();
        // Set the timeout in milliseconds until a connection is established.
        // The default value is zero, that means the timeout is not used. 
        int timeoutConnection = 3000;
        HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
        // Set the default socket timeout (SO_TIMEOUT) 
        // in milliseconds which is the timeout for waiting for data.
        int timeoutSocket = 5000;
        HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

        // defaultHttpClient
        DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (ConnectTimeoutException e) {
        Toast.makeText(getApplicationContext(), "Server timeout", Toast.LENGTH_LONG).show();
        Log.e("CONN TIMEOUT", e.toString());
    } catch (SocketTimeoutException e) {
        Toast.makeText(getApplicationContext(), "Server timeout", Toast.LENGTH_LONG).show();
        Log.e("SOCK TIMEOUT", e.toString());
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        Log.e("OTHER EXCEPTIONS", e.toString());
    }

【问题讨论】:

  • 您的网络服务器正在运行吗?
  • 不,我禁用它以模拟服务器关闭以测试异常。
  • 你能发布完整的 LogCat 吗?
  • @juandg pastebin.com/rpe8iKRi 也添加到原帖中。
  • 这一行是什么? com.project.look.LoginActivity$LoginTask.doInBackground(LoginActivity.java:95)

标签: java android exception timeout httpresponse


【解决方案1】:

解决了。在函数末尾缺少 抛出异常 {。呵呵

感谢@Alin 的好提示。

【讨论】:

  • 连接恢复后能否重新开始下载,还是必须从头开始下载?
  • @JaVAndroid 从头开始​​。
猜你喜欢
  • 2019-07-13
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2012-05-18
相关资源
最近更新 更多