2012-11-02 30 views
0

所以我在Java和Android这完全相同的代码,但由于某些原因,在Android的方法get()始终未能做的工作,返回false,但在标准Java它可以完美运行。我确实有清单中的Internet许可。的BufferedReader工作在标准Java,但不是在Android的

下面是代码:

public boolean get(){ 
     try { 
      jsonObject = new JSONObject(readUrl(url)); // Ignore JSON thing. 
      return true; 
     } catch (Exception ex) { 
      return false; 
     } 
    } 

    private String readUrl(String urlString) throws Exception { 
     BufferedReader reader = null; 
     try { 
      URL url = new URL(urlString); 
      reader = new BufferedReader(new InputStreamReader(url.openStream())); 
      StringBuffer buffer = new StringBuffer(); 
      int read; 
      char[] chars = new char[1024]; 
      while ((read = reader.read(chars)) != -1) { 
       buffer.append(chars, 0, read); 
      } 

      return buffer.toString(); 
     } finally { 
      if (reader != null) { 
       reader.close(); 
      } 
     } 
    } 
+0

您是否在AndroidManifest.xml中添加了INTERNET权限? –

+0

是的,忘了提及它。 –

+2

打印堆栈跟踪并添加到您的问题。它可能只是NetworkOperationNotallowedInUiThread。 –

回答

2

在Android中,当您启动它仍然在主线程运行服务,又名,UIThread,是一个很好的做法你不应该做任何密集在该线程中进行处理,因为它会锁定用户与应用程序的交互。所以即使在一项服务中,您也必须创建自己的线程才能访问网络资源。
这是Services的参考链接

相关问题