0

非同期ワーカーのメイン クラス内に次のコードを記述しました。

private class Renderer extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

              Toast.makeText(getApplicationContext(), "works... ", Toast.LENGTH_LONG).show();
            return null;
        }





         protected void onProgressUpdate(Integer... progress) {

         }

         protected void onPostExecute(Long result) {

         }
     }

しかし、これを呼び出すとアプリがクラッシュします

public void render(View v)
    {
        new Renderer().execute();
    }

何が問題なのか教えてもらえますか?

4

5 に答える 5

1

Toastで aを実行することはできませdoInBackgroundCan't create handler inside thread that has not called Looper.prepare()

この段階でテストするだけの場合 (コードが暗示しているようです)、代わりにログ出力を書き出すことを検討してください。

Toastまたは、どちらonPreExecuteかを入れてくださいonPostExecute

詳細: AsyncTask でトーストを作成する方法、ルーパーを使用するように求められます

于 2013-07-26T11:20:29.353 に答える
0

あなたはトーストを表示していますが、doInbackgroundこれは不可能です。でやるonPostExecute

  protected void onPostExecute(Long result) {
            Toast.makeText(getApplicationContext(), "works... ", Toast.LENGTH_LONG).show();
     }

doInbackgroundバックグラウンド スレッドで呼び出されます。ui スレッドで ui を更新する必要があります。でトーストを表示することもできます onProgressUpdate

詳細はこちら

http://developer.android.com/reference/android/os/AsyncTask.html

The 4 stepsセクションのトピックを確認してください。

于 2013-07-26T11:20:28.687 に答える