0

このサイトの記事のタイトルを解析して、Android アプリのリストビューに表示しようとしています。私のコードは次のようになります。

public class MainActivity extends Activity {

    ArrayList<String> mTitles =  new ArrayList<String>();
    ListView mListView;
    ArrayAdapter<String> mAdapter;

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

        mListView = (ListView) findViewById(R.id.listView);

        processTitles();

        mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, mTitles);
        mListView.setAdapter(mAdapter);
    }

    private void processTitles() {
        String URL = "http://beep.tv2.dk/nyheder";
        try {
            Document doc = Jsoup.connect(URL).userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.151 Safari/535.19").timeout(10000).get();
            Elements titles = doc.select("h2[class=title");
            for(Element title: titles) {
                mTitles.add(title.text());
            }

            if(mTitles.size() == 0) {
                mTitles.add("Empty result");
            }

        } catch (Exception ex) {
            ex.printStackTrace();
            mTitles.clear();
            mTitles.add("Exception: " + ex.toString());
        }
    }


}

スタック オーバーフローに関する多くの記事を読んでも、アプリを開くたびにアプリがクラッシュし続ける理由がわかりません。

4

1 に答える 1

0

@wtsang02 が指摘しているように、メイン スレッドでネットワーク操作を行っています。processTitles ロジックは AsyncTask 内で実行する必要があります。

于 2013-04-26T17:53:26.527 に答える