Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.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

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_Service_Toast - Fatal编程技术网

Android 在服务的线程中显示吐司

Android 在服务的线程中显示吐司,android,multithreading,service,toast,Android,Multithreading,Service,Toast,嗨,我知道这个话题有很多答案。但我试了很多,但都没用。我想展示一个服务线程中的祝酒词。我怎样才能解决这个问题。使用getApplicationContext()等不起作用 我从活动(无边界)启动服务 谢谢大家! 您必须启动线程: new Thread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(

嗨,我知道这个话题有很多答案。但我试了很多,但都没用。我想展示一个服务线程中的祝酒词。我怎样才能解决这个问题。使用getApplicationContext()等不起作用

我从活动(无边界)启动服务


谢谢大家!

您必须启动线程:

new Thread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(),"Your message",Toast.LENGTH_LONG).show();
            }
   }).start();
成员变量

onStartCommand(){
context = getApplicationContext)
}
在启动线程之前获取对上下文的引用

 new Thread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(context,"Your message",Toast.LENGTH_LONG).show();
                }
       }).start();
好了

改为使用有助于上下文管理的AsyncTask


使用UI线程显示您的祝酒词

new Thread(new Runnable() {
    @Override
    public void run() {

        // SHOW TOAST
        activity.runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(yourContext, "Hello from UI-thread", Toast.LENGTH_SHORT).show();
            }
        });

        //... start DB work

    }
}).start();
如果您无法访问某个活动,请按以下方式执行:

new Thread(new Runnable() {
    @Override
    public void run() {

        // no activity, so use Handler & mainlooper
        new Handler(Looper.getMainLooper()).post(
            new Runnable() {
                public void run() {
                    // yourContext is Activity or Application context
                    Toast.makeText(yourContext, "Hello from UI-thread", Toast.LENGTH_SHORT).show();
                }
             }
        );

        //... start DB work

    }
}).start();
看看这个:


看看这是否可行

您不能从非ui线程显示Toast。不要对明显正确的答案投反对票。你只是因为没有从中获益而对答案投反对票吗?我想知道是谁以这种方式否决了所有答案?你的解决方案行不通。当应用程序到达Toast.makeText(上下文,“您的消息”,Toast.LENGTH_LONG).show()点时;应用程序崩溃。是的,此解决方案存在缺陷。它将尝试在背景线程的上下文中显示祝酒词。我将接受什么作为活动?我有几项活动,但我不能上课。那你的背景呢?我更新了我的答案。如果没有活动引用,请使用处理程序。这将给出
java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序

new Thread(new Runnable() {
    @Override
    public void run() {

        // SHOW TOAST
        activity.runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(yourContext, "Hello from UI-thread", Toast.LENGTH_SHORT).show();
            }
        });

        //... start DB work

    }
}).start();
new Thread(new Runnable() {
    @Override
    public void run() {

        // no activity, so use Handler & mainlooper
        new Handler(Looper.getMainLooper()).post(
            new Runnable() {
                public void run() {
                    // yourContext is Activity or Application context
                    Toast.makeText(yourContext, "Hello from UI-thread", Toast.LENGTH_SHORT).show();
                }
             }
        );

        //... start DB work

    }
}).start();
 Handler h = new Handler(context.getMainLooper());

    h.post(new Runnable() {
        @Override
        public void run() {
             Toast.makeText(context,message,Toast.LENGTH_LONG).show();
        }
    });