gpt4 book ai didi

android - 静态方法调用 Toast.makeText

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:51:13 24 4
gpt4 key购买 nike

我有一个在 C++ 中运行的线程,它会在满足某些条件时调用我的 UI 线程的 (Java) 静态方法。调用静态方法时,我希望 Toast 显示在我的 UI 上。我尝试过的是:

1

     static void myMethod(){
Toast.makeText(context, "message", Toast.LENGTH_SHORT).show();
(I have a static context reference in global scope)
}

结果:

     E/AndroidRuntime( 1331): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

2

     static void myMethod(){
runOnUiThread(new Runnable(){
public void run(){
Toast.makeText(Context, "message", Toast.LENGTH_SHORT).show();
}
});

结果:

   Can not compile: Cannot make a static reference to the non-static method runOnUiThread(Runnable) from the type Activity

任何人都可以对此有所了解吗?非常感谢你。

最佳答案

我认为您是从与 UI 线程不同的线程调用此方法,这会导致异常。我刚刚尝试在我的 Application 类中声明一个静态方法,该方法与您的第一个代码相同。它有效 - 但当然只有在从主 UI 线程调用时才有效。

如果您希望能够从不同的线程调用静态方法,那么您需要在 UI 线程上创建一个处理程序来显示 Toast。像这样:

private static final int MSG_SHOW_TOAST = 1;

private static Handler messageHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
if (msg.what == MSG_SHOW_TOAST) {
String message = (String)msg.obj;
Toast.makeText(App.this, message , Toast.LENGTH_SHORT).show();
}
}
};

private static void displayMessage() {
Message msg = new Message();
msg.what = MSG_SHOW_TOAST;
msg.obj = "Message to show";
messageHandler.sendMessage(msg);
}

我的示例中的上下文是从 App.this 中检索的,它是 Application 类。您可以将其替换为您的 Activity 或您的静态全局上下文。

关于android - 静态方法调用 Toast.makeText,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7496563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com