Android java.lang.NoClassDefFoundError:org.jsoup.Jsoup

时间:2012-03-29 22:55:20

标签: java android jsoup

我使用eclipse版本:Indigo Service Release 2 Build id:20120216-1857。 Android版本是2.2。 我创建了一个应用来测试连接并解析一个这样的网站:

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) {
    }
    }
}

清单文件:

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>

我将库jsoup-1.6.1.jar添加到JAVA Buildpath,但我成了运行时错误: E / AndroidRuntime(736):java.lang.NoClassDefFoundError:org.jsoup.Jsoup

如何解决此错误?

8 个答案:

答案 0 :(得分:19)

我最近更新Android的ADT组件后遇到了这个问题。看起来Android忽略了构建路径,而是使用ANT默认值。

我通过从构建路径中删除我的jar文件解决了这个问题,在应用程序heirarchy的“root”中创建了一个文件夹(与src,gen等一起),称为“libs”,并将我的.jar放在那里。清理/构建并重新启动应用程序时,错误应该消失。

仅供参考 - 出现这种情况是因为JAR文件未打包到.apk文件中 - 这就是它正确构建的原因,但在Android设备的运行时无法使用。

请参阅NoClassDefFoundError - Eclipse and Android

答案 1 :(得分:3)

还有一个问题,jars必须在libs(带有's')目录而不是lib ....这可能是你的问题吗?

答案 2 :(得分:2)

您不需要该行:

 <uses-library android:name = "org.jsoup.Jsoup"/>  
清单文件中的

。使用Jsoup所需要做的就是通过执行以下操作来确保它是构建路径的一部分:

  • 右键单击您的项目,然后选择属性
  • 选择 Java构建路径,然后选择添加外部JAR ...
  • 导航到Jsoup jar文件

然后,Jsoup将像java中的任何其他库一样运行。例如,在我的应用程序中,我使用它如下:

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

注意 - 我没有包含我的所有代码,因为它相当长。无论如何,在那之后你只需要根据需要导入类,例如在我的中使用以下内容:

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

答案 3 :(得分:2)

  1. 右键单击项目名称&gt;属性&gt; Java构建路径&gt;选项卡库然后单击Add External jars按钮。
  2. 从您下载jsoup-1.7.3.jar的目录中选择jar的路径。
  3. 添加jar后转到下一个选项卡Order并导出并选择复选框jsoup-1.7.3.jar 4单击确定 5.清理你的项目,然后运行。
  4. 我按照上述步骤解决了同样的问题

答案 4 :(得分:1)

你做错了。你不能在Activity的oncreate中使用Jsoup函数。 您需要创建异步任务或线程。

这是为了防止在您的活动中执行阻止任务。

这是一个很好的博客,解释了如何做并提供示例代码。

Sample Code Click here

答案 5 :(得分:1)

我能够通过以下方式解决这个问题:

  1. 将jsoup jar放在'libs'文件夹中(如John的回答所述)
  2. 从构建路径中删除“Android Dependencies”和“Android Private Libraries”
  3. 使用Android工具&gt;修复“项目属性”以在构建路径中重新填充上述条目。

答案 6 :(得分:0)

关闭Eclipse并再次打开它。问题将得到解决。

答案 7 :(得分:0)

我的解决方案是

  1. 右键单击项目名称&gt;属性&gt; Java构建路径&gt;选项卡库&gt;删除除“Android X.X”(在我的情况下为2.3.3)和“Android依赖项”(根据@KarlKarlsom >android.foxykeep.com<从堆栈问题>stack<找到的链接)以外的所有内容
  2. 我在主项目中创建了文件夹库。当我使用jsoup所以我把它移到了这个文件夹
  3. 重新启动eclipse,清理项目无法正常工作
  4. p.s我正在使用jsoup和sherlock。我没有改变sherlock库,只有我的主要项目。