Jam*_*mes 5 java android android-runonuithread react-native
我正在使用 Sumup SDK 创建通往 React Native 的桥梁。大部分艰苦的工作已经完成,但我试图在处理交易之前调用特定的函数来唤醒读卡器。
我原来的代码是这样的:
@ReactMethod
public void prepareCardTerminal() {
SumUpAPI.prepareForCheckout();
}
}
Run Code Online (Sandbox Code Playgroud)
然后 RN 桥接器调用此函数,如下所示:
static prepareCardTerminal() {
NativeRNSumup.prepareCardTerminal();
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个 React Native 错误:
Must be called on main thread
Run Code Online (Sandbox Code Playgroud)
我读到这可能意味着它需要在 UI 线程上运行,所以我将函数重写为:
@ReactMethod
public void prepareCardTerminal() {
new Thread(new Runnable() {
public void run() {
SumUpAPI.prepareForCheckout();
}
});
}
Run Code Online (Sandbox Code Playgroud)
然而,这并没有达到预期的结果(即使它没有显示任何错误)。
任何提示将不胜感激。
编辑:我找到了这个问题的解决方案。我使用 UiThreadUtil:
import com.facebook.react.bridge.UiThreadUtil;
...
@ReactMethod
public void prepareCardTerminal() {
UiThreadUtil.runOnUiThread(new Runnable() {
@Override
public void run() {
SumUpAPI.prepareForCheckout();
}
});
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
@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);
}
Run Code Online (Sandbox Code Playgroud)
或者更简单:
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
SumUpAPI.prepareForCheckout();
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3949 次 |
最近记录: |