2016-07-16 2 views
1

プログレスバーが終了したらトーストしたい(またはダイアログを表示します)。私はrun()メソッドでifでこれを実行しようとしましたが、それは次のエラーが発生します。プログレスバーが終了したら何かをします

Can't create handler inside thread that has not called Looper.prepare() 

私はそれをどのように行うことができますか?

これは私のコードです:このような

@Override 
public void run() { 
    int myProgress = 0, Speed = 50; 
    ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progressbar); 

    while (myProgress<750){ 
     try{ 
      Thread.sleep(Speed); 
      myProgress++; 
      if (myProgressBar != null) { 
       myProgressBar.setProgress(myProgress); 
      } 
     } 
     catch(Throwable t){ } 
    } 
} 

答えて

0
runOnUiThread(new Runnable() { 
     public void run() { 
      //your code here 
     } 
    }); 

変更。

runOnUiThread(new Runnable() { 
    public void run() { 
    int myProgress = 0, Speed = 50; 
    ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progressbar); 

    while (myProgress<750){ 
    try{ 
     Thread.sleep(Speed); 
     myProgress++; 
     if (myProgressBar != null) { 
      myProgressBar.setProgress(myProgress); 
     } 
    } 
    catch(Throwable t){ } 
}  
} 
}); 

ワーカースレッドは、バックグラウンドタスクを行うためのものであり、あなたがrunOnUiThreadのようなメソッドを呼び出さない限り、あなたはワーカースレッド内UI上で何かを表示することはできません。 runOnUiThreadを呼び出さずにUIスレッドに何かを表示しようとすると、java.lang.RuntimeExceptionが発生します。 まだ問題がある場合は教えてください。

+0

私は私のclass.itでrunOnUiThreadを作成することはできませんが、戻り値の型が必要と述べています。これを間違った場所でやっていますか? –

+0

@ahmadmohseniあなたは理由を正当化できますか?どんなエラーが来るのか、それとも同じですか? –

+0

私は異なる方法でコードを変更し、今すぐ動作します –

0

私はこれを試してみましたが、それが機能するようになりました:

public void run() { 
    int myProgress = 0, Speed = 50; 
    ProgressBar myProgressBar = (ProgressBar) findViewById(R.id.progressbar); 
    while (myProgress<750){ 
     try{ 
      Thread.sleep(Speed); 
      myProgress++; 
      if (myProgressBar != null) { 
       myProgressBar.setProgress(myProgress); 
      } 
     } 
     catch(Throwable t){ } 
} 

final int finalMyProgress = myProgress; 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      if (finalMyProgress == 750) 
       Toast.makeText(word_guess2.this, "hi", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 
関連する問題