Android java.lang.NoClassDefFoundError: org.jsoup.Jsoup
我使用Eclipse版本:Indigo Service Release 2 Build ID:20120216-1857。
Android版本ist 2.2。
我制作了一个应用来测试连接并解析如下网站:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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) { } } } |
清单文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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> <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
如何解决此错误?
最近更新了Android的ADT组件后,我遇到了这个确切的问题。似乎Android忽略了构建路径,而是使用ANT默认值。
我通过从构建路径中删除jar文件,在应用程序层次结构的"根目录"(以及src,gen等)中创建一个名为" libs"的文件夹,然后将.jar放在其中来解决此问题。当您清理/构建并重新启动应用程序时,该错误应消失。
仅供参考-发生这种情况是因为JAR文件未打包到.apk文件中-这就是为什么它可以正确构建,但在运行时在Android设备上不可用的原因。
参见NoClassDefFoundError-Eclipse和Android
还有一个问题是jar必须位于libs(带有's')目录中,而不是lib ....这可能是您的问题吗?
4单击确定
5.clean构建项目,然后运行。
我按照上述步骤解决了相同的问题
您不需要以下行:
1 | <uses-library android:name ="org.jsoup.Jsoup"/> |
在清单文件中。使用Jsoup所需要做的就是通过执行以下操作来确保它是构建路径的一部分:
- 右键单击您的项目,然后选择属性
- 选择Java构建路径,然后选择添加外部JAR...。
- 导航到Jsoup jar文件
然后,Jsoup将像Java中的任何其他库一样工作。例如,在我的应用程序中,我像这样使用它:
1 2 3 4 5 6 7 8 9 10 |
注意-因为它很长,所以我没有包含所有代码。无论如何,之后您只需要导入类,例如在我的类中,我使用以下代码:
1 2 3 4 | import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; |
我可以通过以下方法解决此问题:
你这样做是不对的。您不能在Activity的oncreate中使用Jsoup函数。
您需要创建异步任务或线程。
这是为了防止在您的活动中执行阻止任务。
这是一个不错的博客,解释了如何做以及提供示例代码。
示例代码点击这里
我的解决方案是
ps我正在使用jsoup和sherlock。我没有更改Sherlock库,只有我的主要项目。
只需关闭Eclipse并再次将其打开即可。问题将会解决。