Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 展示两种不同的吐司_Android_Multithreading_Toast - Fatal编程技术网

Android 展示两种不同的吐司

Android 展示两种不同的吐司,android,multithreading,toast,Android,Multithreading,Toast,我想展示两种不同的吐司。第二个应在第二个后8秒出现 我试着编写代码: @Override public void onReceive(Context context, Intent intent) { Toast toast1 = new Toast(context); Toast toast2 = new Toast(context); //toast1 toast1.makeText(context, "First toast ", Toast.LENGTH

我想展示两种不同的吐司。第二个应在第二个后8秒出现

我试着编写代码:

@Override
public void onReceive(Context context, Intent intent) {
    Toast toast1 = new Toast(context);
    Toast toast2 = new Toast(context);

    //toast1
    toast1.makeText(context, "First toast ", Toast.LENGTH_SHORT).show();

    //wait for 8 seconds
        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    //toast2
    toast2.makeText(context, "Toast2 ", Toast.LENGTH_SHORT).show();
不幸的是,只有第二个祝酒词出现。我不知道这个错误是因为我错误地使用了toast还是因为我错误地使用了线程


谢谢

您不能停止UI线程。 为此,请使用处理程序(Android方式)或TimerTask(Java方式)

 Handler h = new Handler();
    h.postDelayed(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(someContext, "someText", Toast.LENGTH_SHORT).show();
        }
    }, 8000);
你可以用

处理程序允许您发送和处理与线程的MessageQueue关联的消息和可运行对象。每个处理程序实例都与一个线程和该线程的消息队列相关联

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast toast1 = new Toast(context);
        Toast toast2 = new Toast(context);

      toast1.makeText(context, "First toast ", Toast.LENGTH_SHORT).show();   

      Handler handler = new Handler(); 
                handler.postDelayed(new Runnable() { 
                     public void run() { 

                  toast2.makeText(context, "Toast2 ", Toast.LENGTH_SHORT).show();     

                     } 
                }, 8000); 

无法停止UI线程。您必须为此使用一些处理程序

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
     public void run() { 
           toast1.makeText(context, "First toast ", Toast.LENGTH_SHORT).show();

     } 
}, 8000); 
我简单地说

@Override
public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"First",Toast.LENGTH_LONG).show();
        try{
            Thread.sleep(2000);
        }catch(Exception e){

        }
        Toast.makeText(context,"Second",Toast.LENGTH_LONG).show();
}
它成功了。。。
但我的建议是,您不应该停止UI线程,使用@IntelliJ Amiya所说的处理程序。

用以下内容修改您的代码:

@Override
public void onReceive(Context context, Intent intent) {
    Toast toast1 = new Toast(context);
    Toast toast2 = new Toast(context);

    //toast1
    toast1.makeText(context, "First toast", Toast.LENGTH_SHORT).show();

    //toast2
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
        public void run() { 
            toast2.makeText(context, "Second toast", Toast.LENGTH_SHORT).show();
        } 
    }, 8000);
}

看到@jackonf1首先发布了正确的答案,而其他人只是复制粘贴,这很有趣。你的回答“有点”错了如果使用postDelayed,则需要在使用处理程序之前发送第一个Toast,并在runnable中发送第二个Toast。谢谢!它起作用了!你能看看这个问题吗?也许你能再给我一个主意,thanx