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

我使用Eclipse版本:Indigo Service Release 2 Build ID:20120216-1857。 Android版本ist 2.2。 我做了一个应用程序来testing一个连接,并parsing这样的网站:

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

我怎样才能解决这个错误?

Solutions Collecting From Web of "Android java.lang.NoClassDefFoundError:org.jsoup.Jsoup"

在Android的ADT组件最近更新之后,我遇到了这个确切的问题。 它看起来像Android忽略了构buildpath,而是使用ANT默认值。

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

仅供参考 – 发生这种情况是因为JAR文件没有打包到.apk文件中 – 这就是为什么它能够正确构build,但是在Android设备运行时不可用。

请参阅NoClassDefFoundError – Eclipse和Android

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

你不需要这行:

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

在你的清单文件中。 您只需要使用Jsoup即可通过执行以下操作来确保它是构buildpath的一部分:

  • 右键单击您的项目,然后select属性
  • selectJava Build Path并selectAdd External 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; 
  1. 右键点击项目名称> Properties> Java Build Path>选项卡Libraries,然后点击Add External jarsbutton。
  2. 从您下载的jsoup-1.7.3.jar目录中selectjar的path。
  3. 添加jar后,转到下一个选项卡订购和导出,并selectcheckboxjsoup-1.7.3.jar 4单击确定5.clean生成您的项目,然后运行。

我按照上面的步骤解决了同样的问题

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

  1. 将jsoup jar放到“libs”文件夹中(正如John的回答中所述)
  2. 从构buildpath中删除“Android依赖项”和“Android专用库”
  3. 使用Android工具>修复项目属性重新填充构buildpath中的上述条目。

你做错了。 你不能在Activity的创build中使用Jsoup函数。 您需要进行asynchronous任务或线程。

这是为了防止在你的活动中做阻塞任务。

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

示例代码点击这里

closuresEclipse并再次打开它。 问题将被解决。

我的解决scheme是

  1. 右键单击项目名称> Properties> Java Build Path>选项卡Libraries>删除除了“Android XX”(2.3.3)和“Android Dependencies”(根据@KarlKarlsomfind的链接) android.foxykeep .com <来自堆栈问题>堆栈< )
  2. 我在我的主要项目中创build文件夹库。 正如我使用jsoup所以我把它移动到这个文件夹
  3. 重新启动日食,清理项目没有工作

ps我正在使用jsoup和sherlock。 我没有改变sherlock图书馆,只有我的主要项目。