2012-01-09 18 views
7

He intentado el ejemplo Jsoup.connect() dado en el sitio web Jsoup y funciona bien en Java.Jsoup.connect() trabajando con Java, no con Android

Por alguna razón, no puedo hacer que funcione en Android Projects (Eclipse) aunque autorizo ​​el permiso de acceso a Internet en mi AndroidManifest. La biblioteca Jsoup está instalada correctamente y puedo trabajar con Jsoup.parse() sin ningún problema. Aquí hay una línea de códigos de lo que funciona en Java y también el permiso en 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 

Cuando trato de ejecutarlo, se bloquea y el registro dice:

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

¿qué dice el registro? – ethan

+0

FALTA DE EXCEPCIÓN principal – user1139012

+0

01-09 20: 19: 30.560: E/AndroidRuntime (26839): java.lang.RuntimeException: no se puede iniciar la actividad ComponentInfo {com.mrdroidinator.com/com.mrdroidinator.com.Parselhjmq}: android. os.NetworkOnMainThreadException – user1139012

Respuesta

16

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

El problema es que está realizando una operación de red en el hilo principal, lo cual está prohibido en el nivel API 11+. Esto se debe a que si lo hace, la IU se "congelará" hasta que el documento termine de descargarse, por lo que es necesario para realizar tales operaciones en un subproceso diferente, lo que no afecta el rendimiento de UI.

Esta es la forma de empezar un nuevo hilo:

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();