El análisis con jsoup lanza error (NetworkOnMainThreadException)

Descargé la biblioteca jsoup jsoup-1.7.1.jar core y la importé a mi proyecto usando el proyecto -> Propiedades-> Java Build Path -> Añadir jarras externas y pegué el archivo de biblioteca a mi carpeta de librerías. Sin embargo, parece que existe algún problema al importar la biblioteca Jsoup a mi proyecto. Cuando ejecuto mi aplicación, al iniciar consigo este error.

12-26 22:59:24.133: E/AndroidRuntime(6710): FATAL EXCEPTION: main 12-26 22:59:24.133: E/AndroidRuntime(6710): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jsouptest/com.example.jsouptest.MainActivity}: android.os.NetworkOnMainThreadException 

Después de buscar y preguntar, descubrí que eclipse ve el jsoup.jar, pero no puede empaquetarlo en el archivo APK para que se ejecute la aplicación. Intenté organizar Importaciones pulsando Mayús + Alt + O y obtendría el mismo error. En este punto, no estoy seguro de lo que está mal y no tengo idea de cómo solucionarlo. Sólo espero que alguien me lleve hacia la solución. Apreciar su tiempo!

Este es mi código:

 package com.example.jsouptest; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import android.app.Activity; import android.os.Bundle; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Document doc; try { doc = Jsoup.connect("http://google.com/").get(); String title = doc.title(); System.out.print(title); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

Usted tiene un

 android.os.NetworkOnMainThreadException 

Que no tiene nada que ver con su frasco funcionando correctamente o no.

La excepción es lanzada por las nuevas versiones de Android para que no bloquee el subproceso de interfaz de usuario (que es el subproceso principal) que realiza operaciones de red.

Utilice un AsyncTask (simple explicación sobre lo que cada parte del AsyncTask se puede encontrar aquí ) u otro hilo para cosas de red. Un Asynctask es más fácil de trabajar si necesita actualizar la interfaz de usuario una vez que termine el trabajo de fondo.

Un ejemplo de AsyncTask con su base de código puede ser:

 private class MyTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... params) { String title =""; Document doc; try { doc = Jsoup.connect("http://google.com/").get(); title = doc.title(); System.out.print(title); } catch (IOException e) { e.printStackTrace(); } return title; } @Override protected void onPostExecute(String result) { //if you had a ui element, you could display the title ((TextView)findViewById (R.id.myTextView)).setText (result); } } 

Asumo:

  • La tarea es una clase interna en su Actividad.
  • Usted está reenviando el título obtenido a un elemento de interfaz de usuario (por ejemplo, un TextView ), ya que es lo que normalmente se utilizan AsyncTasks.

Para llamar a AsyncTask, poner esto después de setContentView(R.layout.activity_main);

 new MyTask().execute(); 

Importe estas librerías android.os.NetworkOnMainThreadException y android.os.StrictMode y use debajo del modo estricto

 StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); 

También agregue esta línea a manifest:

 <uses-permission android:name="android.permission.INTERNET" /> 
  • Extraer texto fuera de una etiqueta HTML
  • HTML a texto con formato
  • Analizando HTML con Jsoup y eliminando spans con cierto estilo
  • Analizar la página web con Jsoup. ¿Por qué el comportamiento en Android es diferente?
  • Ejemplo de Android JSoup
  • JSoup 1.6.0 en Android lanza Excepción: String.isEmpty () NoSuchMethodExists
  • Cómo enviar texto a través de formularios mediante JSoup
  • Usando jsoup con fuerza de cierre proguard cerrar
  • cómo resolver el error jsoup: no se puede encontrar una ruta de certificación válida a la dirección solicitada
  • JSOUP seleccione <div> con un ID específico
  • Cómo llamar a Javascript __doPostBack de JSOUP
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.