簡體   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