Jsoup.connect()使用Java而不是Android

时间:2012-01-09 15:47:15

标签: android jsoup

我已经尝试了Jsoup网站上给出的Jsoup.connect()示例,它在Java中运行良好。

出于某种原因,即使我允许AndroidManifest中的互联网访问权限,我也无法在Android项目(Eclipse)中运行。 Jsoup库已正确安装,我可以使用Jsoup.parse()而不会出现任何问题。以下是使用Java编写的几行代码以及AndroidManifest中的权限。

爪哇

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

1 个答案:

答案 0 :(得分: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();