繁体   English   中英

React Native不从父应用程序调用Android Native方法

[英]React native not calling Android native method from parent app

我正在尝试使我的React Native Redis模块启动并运行,但是出现以下错误。 当我尝试引用任何功能时

 TypeError: undefined is not an object (evaluating '_reactNativeRedispubsub.RedisClient.redisConnect') 

RedisClient.js

 /** * This exposes our Android code into our RN project */ import { NativeModules } from "react-native"; module.exports = NativeModules.RedisClient; 

通过Redison Jar RedisClient.java具有实际Redis调用的文件

 package com.redispubsub; import android.util.Log; import android.widget.Toast; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.modules.core.DeviceEventManagerModule; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.redisson.Redisson; import org.redisson.api.RTopic; import org.redisson.api.RedissonClient; import org.redisson.api.listener.MessageListener; import org.redisson.client.RedisConnectionException; import org.redisson.client.codec.StringCodec; import org.redisson.config.Config; public class RedisClient extends ReactContextBaseJavaModule { private final ReactApplicationContext reactContext; private RedissonClient mredissonClient; public RedisClient(ReactApplicationContext reactContext) { super(reactContext); this.reactContext = reactContext; } @Override public String getName() { return "RedisClient"; } @ReactMethod public void redisConnect(String ipPort) { //Redisson client setup to be done in background thread try { Config config = new Config(); config.useSingleServer().setAddress(ipPort); //IPAddress of Redis and port mredissonClient = Redisson.create(config); } catch (Exception ex) { ex.printStackTrace(); } } @ReactMethod public void subscribe(String channelName) { if (mredissonClient != null) { RTopic subscribeTopic = mredissonClient.getTopic(channelName, StringCodec.INSTANCE); //Channel to listen and Codec. subscribeTopic.addListener(new MessageListener < String > () { @Override public void onMessage(String channel, String msg) { reactContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(channel, msg); } }); } else { } } @ReactMethod public long publish(String ChannelName, String msg) { long clientsReceivedMessage = 0; if (mredissonClient != null) { //Redisson publish RTopic topic = mredissonClient.getTopic(ChannelName, StringCodec.INSTANCE); try { clientsReceivedMessage = topic.publish(msg); //Publishing lat lon to Coros } catch (Exception ex) { ex.printStackTrace(); } } else { } return clientsReceivedMessage; } } 

将方法公开给Java脚本RedisCleintPackage.java

 package com.redispubsub; import com.facebook.react.ReactPackage; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.uimanager.ViewManager; import com.facebook.react.bridge.JavaScriptModule; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Locale; public class RedisClientPackage implements ReactPackage { @Override public List < NativeModule > createNativeModules(ReactApplicationContext reactContext) { List < NativeModule > modules = new ArrayList < > (); modules.add(new RedisClient(reactContext)); return modules; } public List < Class << ? extends JavaScriptModule >> createJSModules() { return Arrays.asList(); } @Override public List < ViewManager > createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } } 

_reactNativeRedispubsub.RedisClient.redisConnect是否意味着它没有到达正确的对象来调用?

我对其为什么不选择RedisClient.java中的redisConnect感到困惑

这整个代码都在我运行MainActivity的我的react-native android项目中工作,但是当我将其发布到npm并在我的npm安装中将其工作时

我知道了

以下更改需要在redisclient.js中完成

/ ** *这会将我们的Android代码公开到我们的RN项目中* /

import { NativeModules } from "react-native";

const { RedisClient } = NativeModules;

export {
  RedisClient
}

我用这样的东西:

import {NativeModules} from 'react-native';
module.exports = NativeModules.RedisClient;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM