【发布时间】:2021-07-08 07:41:16
【问题描述】:
我不是 Java 开发人员,但我需要在我的应用程序中实现一些 Android 原生模块,即第三方库。
我调用@ReactMethod 来处理付款。
@ReactMethod
void processPayment(Boolean showTransactionResult, Callback successCallback, Callback errorCallback) {
Log.d("Message string", String.valueOf("Payment processing started "));
ReactApplicationContext context = getReactApplicationContext();
TransactionCallback callback = null; //?
Activity currentActivity = getCurrentActivity();
Log.d("Current activity", String.valueOf(currentActivity));
try {
makeSale(context, showTransactionResult, callback);
successCallback.invoke("Callback : payment successful");
} catch (IllegalViewOperationException e){
errorCallback.invoke(e.getMessage());
}
}
这个Java函数应该在应用程序前面打开支付窗口。
void makeSale(ReactApplicationContext context, boolean showTransactionResult, TransactionCallback callback){
Map<String, String> extras = new HashMap<>();
extras.put("KEY_1", "Value 1");
extras.put("KEY_2", "Value 2");
PaymentSystem.getInstance().makeSale(context, true, extras, new TransactionCallback() {
@Override
public void onSuccess(String s, @Nullable @org.jetbrains.annotations.Nullable Map<String, String> map) {
//Sale successful
//data is transaction key
//extras is the Map passed in makeSale()
}
@Override
public void onFailure(PaymentSystemException e, @Nullable @org.jetbrains.annotations.Nullable Map<String, String> map) {
//Sale failed
}
});
}
但我收到此错误消息:
E/unknown:ReactNative: Exception in native call
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:1018)
at android.app.ContextImpl.startActivity(ContextImpl.java:994)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:403)
at android.content.ContextWrapper.startActivity(ContextWrapper.java:403)
at digital.paynetics.paymentSystem.paymentSystemSdkMock.launchCallbackMockActivity(:5)
at digital.paynetics.paymentSystem.paymentSystemSdkMock.makeSale(:2)
at com.myapp.paymentSystemModule.makeSale(paymentSystemModule.java:118)
at com.myapp.paymentSystemModule.processPayment(paymentSystemModule.java:82)
at java.lang.reflect.Method.invoke(Native Method)
at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
at android.os.Looper.loop(Looper.java:223)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
at java.lang.Thread.run(Thread.java:923)
我在互联网上找到了解决方案,该解决方案可以轻松地将标志添加到 Activity 中的 Intent。但我不知道该怎么做。我想 Intent 是第三方库的一部分。
请帮助我。如果只是一些 Java 问题,抱歉转储问题。
【问题讨论】:
-
您是否创建了自定义原生类(如 Package 和 Module)来创建自定义原生模块?
-
是的,模块本身工作正常。这些函数是 PaymentSystemModule 类的一部分,PaymentSystemPackage 注册在 MainApplication 类中。
-
我已经发布了一个答案,请看看并告诉我它是否有效?
标签: java android react-native module native