2011-03-27 8 views
1

なぜ私のスレッドから作成された「最初の」トーストのみが表示されます。私のスレッドから実行されたトーストの表示を無視します

public class BannerExample extends Activity { 

    @Override 
    public void onCreate(final Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     Toast toast = Toast.makeText(this, "first toast", Toast.LENGTH_SHORT); 
     toast.show(); 

     new MyThread(this).start(); 

    } 

    class MyThread extends Thread { 

     private Context context; 

     public MyThread(Context context) { 
      this.context = context; 
     } 

     public void run() { 

      Looper.prepare(); // An exception told me to add this - i have no clue why 

      for (int i = 0; i < 3; i++) { 

       try { 
        sleep(1000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       Toast toast = Toast.makeText(context, i + "whoho", Toast.LENGTH_SHORT); 
       toast.show(); 
      } 

     } 

    } 

} 

答えて

1
  1. あなたはLooper.prepareを呼び出すべきではありません。あなたが何か間違ったことをやっていたので、あなたは、例外を取得した。
  2. トーストは、UIツールキットの一部であり、したがって、UIスレッドからアクセスする必要があります - あなたは例外に
  3. を取得した理由です、私はあなたのためThreadを交換示唆しますAsyncTaskonProgressUpdateメソッドを使用してトーストを作成します。これは自動的にUIスレッド上で実行されるためです。それ以外の場合は、ハンドラを使用する必要があります。
  4. 、恐ろしいgetBaseContextではなく、現在のアクティビティからコンテキストから、あなたのコンストラクタに感謝を
+0

をコンテキストを渡します! – corgrath

関連する問題