日食中的吐司错误

时间:2014-02-15 20:10:40

标签: android eclipse

当我举杯时应用程序崩溃,但我不明白为什么。这是代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mvc = (Button) findViewById(R.id.button1);

    mvc.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(getApplicationContext(),"START!" ,Toast.LENGTH_SHORT).show();
            new Thread(new Runnable() {
                public void run() {
                    long startTime = System.currentTimeMillis();
                    while( startTime + 5000 >  System.currentTimeMillis())
                    {
            //      }
            //      while (progressStatus < 1000) {

                        if (k > progressStatus){
                            progressStatus = k;
                        }
                        else {
                            progressStatus = progressStatus;
                        }
                        // Update the progress bar and display the current value in the text view
                        handler.post(new Runnable() {
                            public void run() {
                                progressBar.setProgress(progressStatus);

                            }
                        });
                        try {
                            // Sleep for 10 milliseconds. Just to display the progress slowly
                            Thread.sleep(10);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                    Toast mioToast = Toast.makeText(BluetoothChat.this, 
                            "STOP!", 
                            Toast.LENGTH_LONG);

                            mioToast.show();

                }

            }).start();

        }

    });

第一个toast完美地执行它但是在第二个,其中有“STOP”字样,应用程序崩溃了。怎么会这样? 谢谢。

2 个答案:

答案 0 :(得分:1)

您正尝试在后台主题中显示Toast。只能从UI线程修改UI,这就是崩溃应用程序的原因。

请改用:

handler.post(new Runnable() {
    public void run() {
        Toast.makeText(BluetoothChat.this, 
                        "STOP!", 
                        Toast.LENGTH_LONG).show();
    }
};

这将在UI线程上运行,因此不会使应用程序崩溃。

答案 1 :(得分:0)

尝试将“getApplicationContext()”替换为“this”或“your_class_name.this”