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 に答える