2012-01-09 26 views
7

我试过了Jsoup网站上给出的Jsoup.connect()示例,它在Java中工作正常。Jsoup.connect()使用Java,而不使用Android

出于某种原因,即使我允许在我的AndroidManifest中允许Internet访问权限,我也无法使其在Android项目(Eclipse)中工作。 Jsoup库安装正确,我可以使用Jsoup.parse(),没有任何问题。以下是一些适用于Java的代码行,以及AndroidManifest中的权限。

的Java

public static void main(String[] args){ 
    Document doc; 
    try { 
     doc = Jsoup.connect("http://google.ca/").get(); 
     String title = doc.title(); 
     System.out.print(title); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

AndroidManifest.xml中

<uses-sdk android:minSdkVersion="12" /> 
<uses-permission android:name="android.permission.INTERNET"/> 
<application 

当我尝试运行它,它崩溃和日志说:

01-09 20:19:30.560: E/AndroidRuntime(26839): java.lang.RuntimeException: 
Unable to start activity 
ComponentInfo{com.mrdroidinator.com/com.mrdroidinator.com.Parselhjmq}: android.os.NetworkOnMainThreadException 
+0

什么日志说? – ethan 2012-01-09 21:34:17

+0

致命异常main – user1139012 2012-01-10 01:20:06

+0

01-09 20:19:30.560:E/AndroidRuntime(26839):java.lang.RuntimeException:无法启动活动ComponentInfo {com.mrdroidinator.com/com.mrdroidinator.com.Parselhjmq}:android。 os.NetworkOnMainThreadException – user1139012 2012-01-10 02:00:51

回答

16

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

问题是您正在主线程上执行网络操作,这在API级别11+中禁止。这是因为如果你这样做的话,UI会被“冻结”直到文档完成下载,所以需要在不同的线程上执行这些操作,这不会影响UI性能。

这是你如何开始一个新的线程:

Thread downloadThread = new Thread() { 
    public void run() { 
    Document doc; 
    try { 
     doc = Jsoup.connect("http://google.ca/").get(); 
     String title = doc.title(); 
      System.out.print(title); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
    } 
}; 
downloadThread.start(); 
相关问题