gpt4 book ai didi

java - React Native Android 桥错误 : Must be called on main thread

转载 作者:行者123 更新时间:2023-12-01 18:08:46 26 4
gpt4 key购买 nike

我正在使用 Sumup SDK 创建通往 React Native 的桥梁。大部分艰苦工作已完成,但我试图在处理交易之前调用特定函数来唤醒读卡器。

我原来的代码是这样的:

@ReactMethod
public void prepareCardTerminal() {
SumUpAPI.prepareForCheckout();
}
}

然后 RN 桥接器调用此函数,如下所示:

static prepareCardTerminal() {
NativeRNSumup.prepareCardTerminal();
}

这给我带来了一个 React Native 错误:

Must be called on main thread

我读到这可能意味着它需要在 UI 线程上运行,所以我将函数重写为:

@ReactMethod
public void prepareCardTerminal() {
new Thread(new Runnable() {
public void run() {
SumUpAPI.prepareForCheckout();
}
});
}

但是这并没有达到预期的结果(即使它没有显示任何错误)。

任何提示将不胜感激。

编辑:我找到了解决此问题的方法。我使用UiThreadUtil:

import com.facebook.react.bridge.UiThreadUtil;
...
@ReactMethod
public void prepareCardTerminal() {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
SumUpAPI.prepareForCheckout();
}
});
}

最佳答案

你可以这样做:

@ReactMethod
public void prepareCardTerminal() {

// Get a handler that can be used to post to the main thread
Handler mainHandler = new Handler(context.getMainLooper());

Runnable myRunnable = new Runnable() {
@Override
public void run() {
SumUpAPI.prepareForCheckout();
}
};

mainHandler.post(myRunnable);

}


或者更简单:

new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
SumUpAPI.prepareForCheckout();
}
});

关于java - React Native Android 桥错误 : Must be called on main thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60506273/

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