吐司不能用于新的runnable?

时间:2011-03-11 07:45:57

标签: java android

作为标题,我在runnable中使用了toast但是有一个错误 我的代码:

public Runnable backgroud=new Runnable(){

    public void run() {
        // TODO Auto-generated method stub
        try
        {
            while(!Thread.interrupted())
            {
        String msg="this is a test";
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
        Thread.sleep(1000);
            }
        }
        catch(InterruptedException c)
        {
            c.printStackTrace();
        }
    }

};

2 个答案:

答案 0 :(得分:7)

你不能直接在其他线程中使用吐司,但有一个解决方案 你创建你的msgHandler

 mHandler = new Handler() { 
              @Override public void handleMessage(Message msg) { 
                 String mString=(String)msg.obj;
                 Toast.makeText(this, mString, Toast.LENGTH_SHORT).show();
              }
          };

之后你从你的线程传递消息

 new Thread(new Runnable() {

                           @Override
                           public void run() {
                                   while(!Thread.interrupted())
                                   {

                                       Message msg=new Message();
                                       msg.obj="your text";
                                       mHandler.sendMessage(msg);
                                        try {
                                            Thread.sleep(100);
                                        } 
                                        catch (InterruptedException e) {
                                           e.printStackTrace();
                                        }
                                   }
                           }
                   }).start();

答案 1 :(得分:2)

您不能从其他线程使用Toasts(或在UI上显示某些内容的任何内容)。

请参阅runOnUiThread