2012-01-09 23 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(); 
相關問題