0

ASyncTask を含むコードを持っていますが、問題は、それを数回実行すると、次の例外でクラッシュすることです: RuntimeException: Only one Looper may be created per thread

しかし、私はこれを読みました: https://stackoverflow.com/a/7781280/869180そして、私は過去に同様のエラーがあり、それはUIのもの(私の場合はProgressDialog)に関連していたことを思い出しましたASyncTask。

そのため、ASyncTask からすべての UI を削除し、RuntimeException を回避するために Looper.prepare も削除しましたが、次のようになっていることがわかります。

12-21 00:34:17.363: W/System.err(18658): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
12-21 00:34:17.371: W/System.err(18658):    at android.os.Handler.<init>(Handler.java:121)
12-21 00:34:17.371: W/System.err(18658):    at android.app.Activity.<init>(Activity.java:683)
12-21 00:34:17.371: W/System.err(18658):    at com.konex.Alaves.Parser.<init>(Parser.java:29)
12-21 00:34:17.371: W/System.err(18658):    at com.konex.Alaves.News$LoadNews.doInBackground(News.java:131)

コードは次のとおりです。

private class LoadNews extends AsyncTask<String, Void, Void> 
{
    private List<Noticia> data = new ArrayList<Noticia>();

    @Override
    protected void onPreExecute() {
        m_dialog.show();
    }

    @Override
    protected Void doInBackground(String... url) {
        try {

//          Looper.myLooper();
//          Looper.prepare();
            Parser parser = new Parser(url[0], url[1]);
            data = parser.run();

           } catch (Exception e) { 
               e.printStackTrace();
           }
        return null;
    }

@Override
    protected void onPostExecute(Void result) {

            m_dialog.dismiss();

        if(data !=null )                
            showNewContent(data);
    }
}

私は何かが欠けているか、何か悪いことをしていると確信していますが、どこにもそれを見つけることができません.

どうもありがとう

4

2 に答える 2

2

スタック トレースが示すように、問題Parser.javaParserイニシャライザの 29 行目から発生しています。これは、ここに含めたソース コードではないことに注意してくださいLoadNews

スタック トレースの前の行に基づいて、次のいずれかを行います。

  • Parserから継承Activity

  • Parserをインスタンス化しようとしていますActivity

それらのどちらも可能ではありません。

于 2011-12-21T00:19:12.317 に答える
0

LoadNews クラスの外で Parser をインスタンス化し、それへの参照を渡しますか?

于 2011-12-21T00:24:26.340 に答える