2

这个问题已经通过规避解决了,但是如果有人想尝试找出解决方案,我将不予回答。对于任何寻求快速解决方案的人:我只需将 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 中。

4

1 回答 1

0

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

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

于 2013-01-16T19:05:45.933 回答