我使用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
如何解决此错误?
答案 0 :(得分:19)
我最近更新Android的ADT组件后遇到了这个问题。看起来Android忽略了构建路径,而是使用ANT默认值。
我通过从构建路径中删除我的jar文件解决了这个问题,在应用程序heirarchy的“root”中创建了一个文件夹(与src,gen等一起),称为“libs”,并将我的.jar放在那里。清理/构建并重新启动应用程序时,错误应该消失。
仅供参考 - 出现这种情况是因为JAR文件未打包到.apk文件中 - 这就是它正确构建的原因,但在Android设备的运行时无法使用。
答案 1 :(得分:3)
还有一个问题,jars必须在libs(带有's')目录而不是lib ....这可能是你的问题吗?
答案 2 :(得分:2)
您不需要该行:
<uses-library android:name = "org.jsoup.Jsoup"/>
清单文件中的。使用Jsoup所需要做的就是通过执行以下操作来确保它是构建路径的一部分:
然后,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)
我按照上述步骤解决了同样的问题
答案 4 :(得分:1)
你做错了。你不能在Activity的oncreate中使用Jsoup函数。 您需要创建异步任务或线程。
这是为了防止在您的活动中执行阻止任务。
这是一个很好的博客,解释了如何做并提供示例代码。
答案 5 :(得分:1)
我能够通过以下方式解决这个问题:
答案 6 :(得分:0)
关闭Eclipse并再次打开它。问题将得到解决。
答案 7 :(得分:0)
我的解决方案是
p.s我正在使用jsoup和sherlock。我没有改变sherlock库,只有我的主要项目。