2012-03-29 9 views
8

Trabajo con eclipse Versión: Indigo Service Release 2 Build id: 20120216-1857. La versión de Android es 2.2. que hacer una aplicación para probar una conexión y analizar un sitio web como este:Android java.lang.NoClassDefFoundError: org.jsoup.Jsoup

public class TestActivity extends Activity { 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try { 
     Document doc = Jsoup.connect("http://example.com/").get(); 
     Elements divs = doc.select("div#test"); 

    for (Element div : divs) { 
      System.out.println(div.text()); 
    } 
    } catch (Exception e) { 
    } 
    } 
} 

archivo de manifiesto:

android:installLocation="preferExternal" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk android:minSdkVersion="8" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <activity 
     android:name=".TestActivity" 
     android:label="@string/app_name" 
    android:configChanges="orientation" 
    > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter>    
     <uses-library android :name="org.jsoup.Jsoup" /> 
    </activity> 
</application> 

agrego la biblioteca jsoup-1.6.1.jar a JAVA BuildPath, pero Me convierto en el error en tiempo de ejecución: E/AndroidRuntime (736): java.lang.NoClassDefFoundError: org.jsoup.Jsoup

¿Cómo puedo resolver este error?

+0

Este título del tema debe contener palabras relacionadas con el problema Adt 17 Creo que – deadfish

+0

Todo, lo siento, pero tengo que decirlo. "¡No sopa para ti!" –

Respuesta

19

Encontré este problema exacto después de una actualización reciente del componente ADT de Android. Parece que Android está ignorando la ruta de compilación y en su lugar utiliza los valores predeterminados de ANT.

Resolví esto eliminando mi archivo jar de la ruta de compilación, creando una carpeta en la "raíz" de la jerarquía de la aplicación (junto con src, gen, etc.) llamada "libs" y poniendo mi .jar allí. Cuando limpie/construya y relance la aplicación, el error debería desaparecer.

FYI - Esto ocurre porque el archivo JAR no se empaqueta en los archivos .apk; por eso se compila correctamente, pero no está disponible durante el tiempo de ejecución en su dispositivo Android.

ver NoClassDefFoundError - Eclipse and Android

+1

Esto no es una curita, es lo que se supone que debes hacer. Ver http://stackoverflow.com/questions/9824491/android-sdk-r17-ruins-working-projects/9824539#9824539 – CommonsWare

+0

Sigo la sugerencia de John y su función ahora. Muchas gracias – red

+0

rojo, asegúrese de marcar esto como "aceptado" si lo ayudó. Mark (commonsware) - Gracias por el consejo. Lo eliminaré. –

2

No es necesario la línea:

<uses-library android:name = "org.jsoup.Jsoup"/> 

en el archivo de manifiesto. Todo lo que necesita hacer para utilizar Jsoup es asegurarse de que es parte de su trayectoria de la estructura de la siguiente manera:

  • Haga clic derecho sobre su proyecto y seleccione Propiedades
  • Seleccionar Vía de construcción Java y seleccione Añadir jAR externos ...
  • Vaya a la jarra Jsoup el archivo

Entonces, Jsoup actuará como cualquier otra biblioteca de java. Por ejemplo, en mi aplicación lo uso así:

try 
    { 
        Document doc = Jsoup.connect(myHtml).get(); 

        Elements table = doc.select("table#ctl00_ContentPlaceHolder1_tblPasses"); 

        // Returns first row of the table which we want 
        Elements row = table.select("tr.lightrow"); 
        Element record_One = row.first(); 
    } 

Nota - No he incluido todo mi código para ello porque es bastante largo. De todos modos, después de que acaba de importar las clases, según sea necesario, por ejemplo en la mía utilizo el siguiente:

import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 
+1

"Seleccione Java Build Path y seleccione Agregar JAR externos ..." - eso es muy incorrecto para las herramientas R17.Todos los JAR de terceros deben estar en un directorio 'libs /' del proyecto, y no es necesario agregarlos manualmente a la ruta de compilación ahora. – CommonsWare

+0

¿De verdad? No lo sabía. ¿Dónde leo sobre eso? – Katana24

+0

http://stackoverflow.com/questions/9824491/android-sdk-r17-ruins-working-projects/9824539#9824539 – CommonsWare

3

También está el problema de que los frascos tienen que estar en las librerías (con una 's') directorio y no lib ... ¿podría ser este tu problema?

0

Simplemente cierre el Eclipse y ábralo de nuevo. El problema será resuelto

0

Mi solución fue

  1. clic derecho sobre el nombre del proyecto> Propiedades> Java Build Path> pestaña Bibliotecas> eliminar todo excepto el "Android XX" (2.3.3 en mi caso) y las "Dependencias Android "(según el enlace encontrado por @KarlKarlsom >android.foxykeep.com< desde el problema de la pila >stack<)
  2. Creé carpetas de carpetas en mis proyectos principales. Como yo estaba usando jsoup así que me trasladé a esta carpeta
  3. Eclipse reiniciado, limpiar proyecto no funcionó

p.s que estaba usando jsoup y Sherlock. No cambié la biblioteca de Sherlock, solo mi proyecto principal.

1

Lo estás haciendo mal. No puede usar las funciones de Jsoup en la creación de Activity. Necesita hacer una tarea asincrónica o un hilo.

Esto es para evitar realizar tareas de bloqueo en su actividad.

Aquí hay un buen blog que explica cómo hacerlo y proporciona un código de muestra también.

Sample Code Click here

2
  1. Haga clic derecho sobre el nombre del proyecto> Propiedades> Java Build Path> Bibliotecas de la ficha a continuación, haga clic en el botón Añadir JAR externos.
  2. Seleccione la ruta del jar desde el directorio donde descargó jsoup-1.7.3.jar.
  3. Después de agregar el jar, vaya a la siguiente pestaña Ordenar y exportar y seleccionar la casilla de verificación jsoup-1.7.3.jar 4 Haga clic en Aceptar 5. Limpie su proyecto y luego ejecútelo.

I resuelto el mismo problema siguiendo los pasos anteriores del

1

que era capaz de resolver este problema mediante la siguiente:

  1. Colocar el frasco jsoup en la carpeta 'libs' (como se ha señalado en la respuesta de John)
  2. Elimina las "Dependencias de Android" y las "Bibliotecas privadas de Android" de la ruta de compilación
  3. Usando las herramientas de Android> Reparar proyecto Prope rties para repoblar las entradas anteriores en la ruta de compilación.
Cuestiones relacionadas