4

我正在使用 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"); 
4

1 回答 1

1

它给networkonmainthread异常

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

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

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

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

于 2012-08-15T16:46:29.847 回答