Jsoup.connect() работает с Java, а не с Android

Я попробовал пример Jsoup.connect(), приведенный на веб-сайте Jsoup, и он отлично работает на Java.

По какой-то причине я не могу заставить его работать в проектах Android (Eclipse), хотя я разрешаю доступ в Интернет в моем файле AndroidManifest. Библиотека 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

person user1139012    schedule 09.01.2012    source источник
comment
01-09 20:19:30.560: E/AndroidRuntime(26839): java.lang.RuntimeException: невозможно запустить активность ComponentInfo{com.mrdroidinator.com/com.mrdroidinator.com.Parselhjmq}: android.os.NetworkOnMainThreadException   -  person user1139012    schedule 10.01.2012
comment
Ни у кого никогда не было этой проблемы? Я также смог подключиться к Yahoo! API (OAuth) через Java, но он не работает в приложении Android в Eclipse. Я так понимаю эти проблемы взаимосвязаны?   -  person user1139012    schedule 12.01.2012
comment
Вы случайно не за прокси? Может быть, прокси не установлен для вашего Android-проекта?   -  person B. Anderson    schedule 10.02.2012
comment
теперь это проще, см. пример кода рецепта здесь https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/AccessHeaders.java   -  person Someone Somewhere    schedule 10.02.2016


Ответы (1)


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

Проблема в том, что вы выполняете сетевую операцию в основном потоке, что запрещено в уровне API 11+. Это связано с тем, что если вы это сделаете, пользовательский интерфейс «замораживается» до тех пор, пока документ не завершит загрузку, поэтому необходимо выполнять такие операции в другом потоке, что не влияет на производительность пользовательского интерфейса.

Вот как вы начинаете новый поток:

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();
person packito    schedule 04.04.2012