无法在安卓中使用 httpconnection 进行连接



我正在使用android 2.3.3,我制作了一个RSS阅读器,效果很好,然后我将那个简单的RSS阅读器的代码集成到另一个活动中,只是复制粘贴它仔细,那里没有错误。

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

我已经在安卓清单中添加了权限,而我的 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"); 

它给出了主线程上的网络异常

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

"在主线程中"通常意味着您在事件处理程序(如 onResumeonPause 或 OnClickListener 的 onClick 方法中执行此操作。你可以看看这篇文章(无痛线程)来了解问题所在以及为什么不允许这样做。 通常,如果在主线程中执行网络操作,则会阻止 GUI 事件的处理,如果网络操作速度较慢,则应用程序将无响应。

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

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

相关内容

  • 没有找到相关文章

最新更新