无法在android中使用httpconnection进行连接

2023-12-01

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

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

我已经在 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"); 

它给出了networkonmainthread异常

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

“在主线程中”通常意味着您在事件处理程序中执行此操作,例如onResume, onPause,或在onClickOnClickListener 的方法。你可以看看这个帖子(无痛穿线)了解问题所在以及为什么不允许这样做。通常,如果您在主线程中执行网络操作,则会阻塞 GUI 事件的处理,如果网络操作缓慢,您的应用程序将无法响应。

严格模式出现在 API 级别 9 中,因此这解释了为什么如果最小 SDK 版本为 10 时会出现问题,以及为什么它可以与最小 SDK 版本 8 一起使用。

你应该使用异步任务或其他方法在后台执行此操作。您可以参考1为了这。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在android中使用httpconnection进行连接 的相关文章

随机推荐