当前位置: 首页 > 知识库问答 >
问题:

如何将Java activity的数据传递给react Native?

姚骁
2023-03-14

我无法将数据从Java·activity传递给react Native。我正在处理一个卡片支付,当支付完成时,响应存储在一个名为message的变量中。我需要将此消息传递给我的react本机代码。

//Java模块,我要传递的数据在“消息”中

公共类HelloWorldModule扩展ReactContextBaseJavaModule实现ActivityEventListener{activity·activity;

ReactApplicationContext;公共HelloWorldModule(ReactApplicationContext reactContext,activity activity){super(reactContext);//React Native this.reactContext=reactContext;this.Activity=activity;reactContext.AddActivityEventListener(this)所需;//将此本机模块注册为activity结果侦听器

}

@Override
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
    // ReactApplicationContext reactContext = this.getReactNativeHost().getReactInstanceManager().getCurrentReactApplicationContext();
    // reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit();
    // reactContext
    // .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
    // .emit('message', message);

/*
 *  We advise you to do a further verification of transaction's details on your server to be
 *  sure everything checks out before providing service or goods.
*/
if (requestCode == RaveConstants.RAVE_REQUEST_CODE && data != null) {
    String message = data.getStringExtra("response");
    // Log.e("RAVE",message);
    if (resultCode == RavePayActivity.RESULT_SUCCESS) {
        Toast.makeText(activity, "SUCCESS " + message, Toast.LENGTH_SHORT).show();
    }
    else if (resultCode == RavePayActivity.RESULT_ERROR) {
        Toast.makeText(activity, "ERROR " + message, Toast.LENGTH_SHORT).show();
    }
    else if (resultCode == RavePayActivity.RESULT_CANCELLED) {
        Toast.makeText(activity, "CANCELLED " + message, Toast.LENGTH_SHORT).show();
    }
}
// else {
//      super.onActivityResult(activity, requestCode, resultCode, data);
// }

}

//@override//public void onActivityResult(activity·activity,int requestCode,int resultCode,Intent data){//toast.maketext(activity,“hello”,toast.length_short).show();//}

@Override

public void onNewIntent(Intent Intent){

}

@Override
//getName is required to define the name of the module represented in JavaScript
public String getName() { 
    return "HelloWorld";
}

@ReactMethod
public void sayHi(Callback errorCallback, Callback successCallback) {
    try{
        int amount = 30;//call.argument("amount");
                    String narration = "Payment for soup";//call.argument("nara");
                    String countryCode = "NG"; //call.argument("countryCode");
                    String currency =  "NGN"; //call.argument("currency");
                    String amountText = "50";//call.argument("amountText");
                    String email = "*****@yahoo.com";//call.argument("email");
                    String name = "Ubanna Danny";//call.argument("name");
                    String paymentId = "a98sjkhdjdu";//call.argument("paymentId");



                    String key ="FLWPUBK-****-X";
                     String encryptionKey = "****";

                            new RavePayManager(activity).setAmount(Double.parseDouble(String.valueOf(amount)))
                            .setCountry(countryCode)
                            .setCurrency(currency)
                            .setEmail(email)
                            .setfName(name)
                            .setlName("")
                            .setNarration(narration)
                            .setPublicKey(key)
                            .setEncryptionKey(encryptionKey)
                            .setTxRef(paymentId)
                            .acceptMpesaPayments(false)
                            .acceptAccountPayments(true)
                            .acceptCardPayments(true)
                            .acceptGHMobileMoneyPayments(false)
                            .onStagingEnv(false)
                            .allowSaveCardFeature(true)
                            .initialize();
    } catch (IllegalViewOperationException e) {
        errorCallback.invoke(e.getMessage());
    }                  
}

}

//响应本机代码

   // async function to call the Java native method
    async sayHiFromJava() {
      HelloWorld.sayHi( (err) => {console.log(err)}, (msg) => {console.log(msg)} );
    }

请帮帮忙。

共有1个答案

陆阳曜
2023-03-14

使用设备发射器从本机发送数据以响应本机

在activity结果中添加以下代码

ReactContext context = this.getReactNativeHost().getReactInstanceManager().getCurrentReactContext();

context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit();
context
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
  .emit('message', message);

在react native中添加Dives发射器侦听器

import {DeviceEventEmitter} from 'react-native';

EmitterModule.addListener('message', (message) => {
  console.log(message);
};
 类似资料:
  • 很新的反应。。。 我试图循环我的this.props.children,以便向他们传递一个在我的父项中定义的字符串。。。在没有在render方法中定义这些子对象的情况下,这是可能的吗? OwnRenderer应该将道具字符串传递给它的所有子级。。。OwnRenderer不知道要渲染哪个孩子,因此无法通过“”直接传递道具。。。 我试着绕过孩子们直接传递那根绳子,但不幸的是,这不起作用。 不知怎的,它

  • 我有三节课 1.菜单活动 2.LocationUpdateService 3.多重标记器 1.菜单活动 2、LocationUpdateService:(这是服务类) 3、多重标记(活动) 我的问题是:当我打开我的菜单活动我的Toast消息打印发送数据到广播接收器,然后点击按钮我调用MultipleMarker。我无法从服务中获取值。。。但当我按下后退按钮时,我重定向到MenuActivity,此

  • 作为React课程的一部分,我正在制作一个虚拟电子商店,并希望将产品从一个组件的状态传递到功能组件并在那里显示产品属性。如何将数据从状态传递到无状态组件? 我设置了一个组件ProductList,它存储产品(从api获取)和ProductDetail,它应该显示详细信息(通过id找到产品并显示它的描述、img等)。我设置了一个pp.js,它有两个路由-列表和详细信息。 pp.js: Product

  • 我有以下运行时生成的json数组。因此,名称/数据对的数量有所不同。 我想将这些数据传递到highcharts系列中。 这就是我目前的做法。 但是如果数组中元素的数量改变了,这就不起作用了。我该如何解决这个问题?演示代码会对我有帮助。 我已经考虑了以下问题,但我无法解决这个问题。 动态添加到高图表 海图系列数据阵列

  • 问题内容: 我正在A中使用RUN指令安装rpm 但是,我想将值“ 2.3”作为参数传递。我的RUN指令应类似于: 哪里 问题答案: 您正在寻找和指导。这些是Docker 1.9中的新功能。查看https://docs.docker.com/engine/reference/builder/#arg。这将允许您添加到,然后使用构建。

  • 问题内容: 我有任何看法: 是 我的状态定义为: 但是当我单击链接时,它转到 我想要的是去 可以将ui-router与AngularJS一起使用吗? 问题答案: ui-router Github中 已经记录了问题,您可以在 这里 找到它 **** 为了解决这个问题,您需要在配置文件中添加此代码,以处理url的编码和解码。 您可以使用以下代码注册自己的替换“字符串”类型,从而覆盖内置的字符串类型(执