Android上的Jsoup抛出NoClassDefFoundError:java.applet.Applet

时间:2013-01-16 18:47:16

标签: android applet jsoup noclassdeffounderror

这个问题已经通过规避来解决,但是如果有人想要找出解决方案,我会留下未答复的问题。对于任何寻求快速修复的人来说:我只需将Jsoup替换为jericho即可使其工作,而且没有任何打嗝。

我有一个非常奇怪的问题,如标题中所述。我正在做一些html抓取,这在我的电脑上运行得很好,但是一旦我把它变成Android apk,图书馆就好像打破了。我正在使用Jsoup 1.7.1。这是复制错误的示例代码。

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        GetHtml updater = new GetHtml();
        updater.execute();
    }

    public class GetHtml extends AsyncTask<Void, Void, String>{

        @Override
        protected String doInBackground(Void... arg0) {
            Document doc;
            try {
                doc = Jsoup.connect("http://www.example.com").get();
                String header = doc.getElementsByTag("h1").get(0).text();
                return header;
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return "";
        }

        @Override
        protected void onPostExecute(String arg0){
            ListView lv = (ListView)findViewById(R.id.listView1);
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, R.id.listView1);
            lv.setAdapter(adapter);

            adapter.add(arg0);
            adapter.notifyDataSetChanged();
        }
    }
}

这引发了一堆错误,但突出的是

01-16 19:30:47.793: E/AndroidRuntime(29082): Caused by: java.lang.NoClassDefFoundError: java.applet.Applet

这很烦人,因为我看到许多使用Jsoup的项目都很好,还有教程。有谁知道造成这种情况的原因是什么?

哦,为了清楚起见,我将Jsoup-1.7.1.jar作为外部jar链接并复制到$ PROJECT_ROOT / libs。

1 个答案:

答案 0 :(得分:0)

对于API 11或更高版本的目标,不允许您从主UI线程访问网络。如果你这样做,你会得到一个NetworkOnMainThreadExeption。检查日志中是否存在该异常,因为您正在从主UI线程访问网络。

您可以通过将jsoup提取和处理放入AsyncTask

来解决此问题