进度条的线程安卓错误吐司

时间:2015-03-27 19:27:39

标签: java android multithreading progress-bar

我尝试使用按钮运行进度条,(单击按钮并将变量发送到线程并使用它填充进度条)。 我已经使这个代码将变量发送到线程,然后更新进度条编号,最后将其发送到线程以在进度条完成后显示吐司,但是什么时候应该显示吐司,它没有做到这一点。代码按钮:

testme.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
            Toast.makeText(getBaseContext(),"Descanzando ok, descanzando ",Toast.LENGTH_LONG).show();
            Random rnd = new Random();
            int n = rnd.nextInt(120-1)+1;
            Toast.makeText(getBaseContext(),"el numero random es "+n,Toast.LENGTH_LONG).show();
            startProgress(v,n);});
thred and toast:

public void startProgress(View view, int a) {
    bar.setVisibility(View.VISIBLE);
    bar.setProgress(0);
    new Thread(new Task(a)).start();
}

class Task implements Runnable {
    int num=0;
    public Task(int a){
        num=a;
    }

    @Override
    public void run() {
        for (int i = 0; i <= num; i++) {
            final int value = i;
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            bar.setProgress(value);
            if(value==num){
                Toast.makeText(getBaseContext(),"Completado ok, completado!",Toast.LENGTH_LONG).show();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定你要做什么,但是Toast必须将活动本身作为上下文(而不是传递getBaseContext()),否则它将不会被显示。

顺便说一句,您应该考虑使用Handler并使用postDelay函数而不是所有这些:

http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable,长)