2011-03-27 2 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. 오히려 상황보다 현재 활동에서
+0

최고 생성자, 덕분에 getBaseContext에서 컨텍스트를 전달합니다! – corgrath

관련 문제