【问题标题】:Cannot connect using httpconnection in android无法在android中使用httpconnection进行连接
【发布时间】:2012-07-02 05:08:39
【问题描述】:

我使用的是android 2.3.3,我做了一个很好用的rss阅读器,然后我把那个简单的rss阅读器的代码集成到另一个活动中,仔细复制粘贴,没有错误。

问题是当我在我的模拟器上运行应用程序时,它给了我错误连接异常。然后我通过在 try 块中的每一行之后放置敬酒来发现问题出在 httpconnection.connect(); 行。

我在 android 清单中添加了权限,而我的 logcat 给出了javaio exception:error connecting 的警告。

    try {
        HttpURLConnection httpURLConnection = (HttpURLConnection) connection;
        //Toast.makeText(this, "urlconnection passed", Toast.LENGTH_SHORT).show();
        httpURLConnection.setAllowUserInteraction(false);
        httpURLConnection.setInstanceFollowRedirects(true);
        //Toast.makeText(this, "setting response method", Toast.LENGTH_SHORT).show();
        httpURLConnection.setRequestMethod("GET");
        //Toast.makeText(this, "connecting", Toast.LENGTH_SHORT).show();
        httpURLConnection.connect();
        Toast.makeText(this, "on response code", Toast.LENGTH_SHORT).show();
        response = httpURLConnection.getResponseCode();
        //Toast.makeText(this, "response code passed", Toast.LENGTH_SHORT).show();
        if (response == HttpURLConnection.HTTP_OK) {
            //Toast.makeText(this, "OK", Toast.LENGTH_SHORT).show();
            inputStream = httpURLConnection.getInputStream();
        }

    } catch (Exception e) {
        // TODO: handle exception
        throw new IOException("Error connecting");
    }

这里是创建对象的代码:

URL url = new URL(UrlString);
URLConnection connection = url.openConnection();
if (!(connection instanceof HttpURLConnection)) 
  throw new IOException("Not a HTTP connection"); 

【问题讨论】:

  • 确保你有 在 manifast
  • 我已经将它包含在我的清单文件中
  • 显示你创建连接对象的代码
  • 你能告诉我是否有办法弄清楚为什么 connect() 行不工作?因为 Log Cat 没有给我任何有用的提示。
  • It gives networkonmainthread exception 这说明你是在主线程上做网络操作,后面的版本是不允许的……你应该用AsyncTask或者其他方法在后台做。。 .

标签: java android httpconnection


【解决方案1】:

它给networkonmainthread异常

这意味着你在主线程上进行网络操作,这在严格模式下是不允许的。

“在主线程中”通常意味着您在事件处理程序中执行此操作,例如 onResumeonPause 或 OnClickListener 的 onClick 方法。您可以查看这篇文章 (Painless threading) 以了解问题所在以及为什么不允许这样做。一般来说,如果你在主线程中执行网络操作,它会阻塞GUI事件的处理,如果网络操作很慢,你的应用程序将没有响应。

Strict Mode 出现在 API 级别 9 中,因此这解释了为什么如果 min SDK 版本为 10 会出现问题,以及为什么它适用于 min SDK 版本 8。

您应该使用AsyncTask 或其他方法在后台执行此操作。这个可以参考1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2020-10-12
    • 2012-12-13
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多