gpt4 book ai didi

android - 如何从另一个线程做 toast (没有 runOnUiThread)

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:28:44 25 4
gpt4 key购买 nike

我需要从处理线程制作 Android toast,这是 OpenCV 的自定义,因此我不能按照此处的建议使用 runOnUiThread(): Android: Toast in a thread .

大部分代码来自 CVCamera 示例应用。但是那些不熟悉的人,当我选择 Surf 菜单按钮时,SURFProcessor 被调用如下:

           else if (item.getTitle().equals("SURF")) {

defaultcallbackstack.addFirst(new SURFProcessor());
toasts(DIALOG_TUTORIAL_SURF, "");

}

运行此处理器线程后,当我按下手机的相机按钮 (capturePress = true) 时,就会拍摄图像并完成处理。我想调用 toasts 方法,如下所示:

class SURFProcessor implements NativeProcessor.PoolCallback {

@Override
public void process(int idx, image_pool pool, long timestamp,
NativeProcessor nativeProcessor) {
if(capturePress) {
String processMsg = processor.processFeatures(idx, pool, cvcamera.DETECT_SURF);
capturePress = false;
toasts(PROCESS_MESSAGE, processMsg);
}
}
}

这是 toasts 方法,位于扩展 Activity 的主类中:

void toasts(int id, String msg) {
switch (id) {
case PROCESS_MESSAGE:
Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
break;
.........

现在这段代码给我一个错误:“无法在尚未调用 Looper.prepare() 的线程内创建处理程序。”我该如何调用 toasts 方法?或者是否可以让 toasts 方法监听 processMsg 的变化?如果可能的话,我可以通过发送 processMsg 或更改类变量来解决。本质上,我需要从这个处理器线程更新一个字符串。

非常感谢,如果需要,我会提供更多信息/代码。
-汤姆

最佳答案

使用处理程序和可运行的使处理程序在 Activity 中可运行:

// these are members in the Activity class
Handler toastHandler = new Handler();
Runnable toastRunnable = new Runnable() {public void run() {Toast.makeText(Activity.this,...).show();}}

然后从你的线程使用调用它

toastHandler.post(toastRunnable);

处理程序在创建它的线程中执行可运行对象。

关于android - 如何从另一个线程做 toast (没有 runOnUiThread),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5385922/

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