2016-07-16 4 views
1

Я хочу, чтобы в топе (или покажите диалог), когда заканчивается индикатор прогресса. Я пытался сделать это с if в методе Run(), но это вызывает следующее сообщение об ошибке:что-то делать, когда индикатор выполнения завершен.

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. Если вы попытаетесь показать что-либо в потоке пользовательского интерфейса без вызова runOnUiThread, будет исключение java.lang.RuntimeException. Сообщите мне, если у вас все еще есть проблемы.

+0

я не могу создать runOnUiThread в моем class.it говорит требуется тип возврата. я делаю это в неправильном месте? –

+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(); 
     } 
    }); 
} 
Смежные вопросы