在android中无法使用httpconnection连接

我正在使用android 2.3.3,我已经制作了一个工作得很好的rss阅读器,然后我将那个简单的rss阅读器的代码集成到另一个活动中,只需复制粘贴它,没有错误。

问题是当我在我的模拟器上运行应用程序时,它给我连接exception的错误。 然后我通过在try block中的每行之后放置toast来解决问题是在httpconnection.connect(); 线。

我已经在android清单中添加了权限,而我的logcat发出了javaio exception:error connecting的警告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"); 

它给出了networkonmainthreadexception

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

“在主线程中”通常意味着您在事件处理程序中执行它,如onResumeonPause或OnClickListener的onClick方法。 您可以查看此post( 无痛线程 )以了解问题是什么以及为什么不允许这样做。 通常,如果在主线程中执行网络操作,则会阻止GUI事件的处理,如果网络操作很慢,则应用程序将无法响应。

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

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