【问题标题】:React Native (Android Native Module): Get access to ReactContext in another Class?React Native(Android Native Module):在另一个类中获取对 ReactContext 的访问权限?
【发布时间】:2016-02-08 20:25:56
【问题描述】:

我想在 MyCustomModuleClass 中调用一个方法,从另一个类扩展 ReactContextBaseJavaModule

MyCustomModule.java

public class MyCustomModule extends ReactContextBaseJavaModule {

  private ReactContext mReactContext;

  public MyCustomModule(ReactApplicationContext reactContext) {
    super(reactContext);
    mReactContext = reactContext;
  }

  @Override
  public String getName() {
    return "CustomModule";
  }


    private void sendEvent(String eventName, Object params) {
        mReactContext
            .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
            .emit(eventName, params);
    }    
}

我正在尝试这个..

OtherClass.java

public class OtherClass extends AnotherClass {

    @Override
    protected void eventOccurred(Context context) {
        MyCustomModule RNC = new MyCustomModule(?);//-> Can't call without ReactContext
        RNC.sendEvent("CustomEvent", ObjectData); 
    }   
}

对不起,我对java一窍不通,谁能帮帮我?

有什么方法可以在 OtherClass 中获取 ReactContext 吗?

【问题讨论】:

  • 它看起来不像你在 MyCustomModule 上调用一个有效的构造函数。也许这只是您在尝试创建一个简单示例时犯的一个错字。我不明白你为什么不能这样做。试试看吧。
  • 是的,我做错了。让我更新一下我的问题。
  • 我用另一种方式解决了我的问题,使用 LocalBroadcastManager。
  • @antihate - 你介意分享你的解决方案吗?这个问题让我抓狂..
  • 这个问题在issues中得到了更多反馈:github.com/facebook/react-native/issues/5846

标签: java android react-native


【解决方案1】:

这是我在 FirebaseMessagingService 扩展课程中的做法。

public class MyPushListener extends FirebaseMessagingService {

  @Override
  public void onMessageReceived(JSONObject message, JSONObject content){

    MainApplication application = (MainApplication) this.getApplication();

    ReactNativeHost reactNativeHost = application.getReactNativeHost();
    ReactInstanceManager reactInstanceManager = reactNativeHost.getReactInstanceManager();
    ReactContext reactContext = reactInstanceManager.getCurrentReactContext();

    if (reactContext != null) {
      WritableNativeArray params = new WritableNativeArray();
      params.pushString(message.toString());
      reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
          .emit("EVENT_HAS_TRIGGERED", params);
    }
  }
}

Source

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-05
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多