[英]Send data from Android activity to React Native
我正在處理本機android活動中的意圖,並希望將在意圖中獲得的數據發送到react本機部分。 請原諒我拙劣的術語/解釋-關於Android開發,我是一個完整的初學者。
我已經嘗試按照以下指南進行操作: https : //facebook.github.io/react-native/docs/native-modules-android.html#sending-events-to-javascript ,但我一直無法獲得主要的反應上下文。 因此,意圖已經超出了應用程序的范圍,我想獲取意圖數據並啟動應用程序。 例如,主視圖應僅顯示意圖的文本。
這是我發送事件的方式:
public class CustomActivity extends ReactActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WritableMap map = Arguments.createMap();
map.putString("messageString", "CustomMessage");
try {
getReactInstanceManager().getCurrentReactContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("customEvent", map);
} catch (Exception e){
Log.e("ReactNative", "Caught Exception: " + e.getMessage());
}
}
這引發了異常
引發異常:嘗試在空對象引用上調用虛擬方法'com.facebook.react.bridge.JavaScriptModule com.facebook.react.bridge.ReactContext.getJSModule(java.lang.Class)'
我沒有為活動定義自定義布局,而是想使用主應用程序的上下文。
因此似乎失敗了,因為沒有及時創建上下文。 為了解決這個問題,我添加了一個忙於等待上下文創建的等待。
while (getReactInstanceManager().getCurrentReactContext() == null); // Busy wait.
getReactInstanceManager().getCurrentReactContext()
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("defineIntent", map);
如果有人知道處理等待的更好方法,請在此處進行更新。 謝謝!
我在生產中遇到了
Fatal Exception: java.lang.RuntimeException
Unable to resume activity {minibar.android/minibar.android.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.facebook.react.bridge.JavaScriptModule com.facebook.react.bridge.ReactContext.getJSModule(java.lang.Class)' on a null object reference
Caused by java.lang.NullPointerException
Attempt to invoke virtual method 'com.facebook.react.bridge.JavaScriptModule com.facebook.react.bridge.ReactContext.getJSModule(java.lang.Class)' on a null object reference
因此解決方案是檢查reactContext
是否不為null,否則創建偵聽器並等待它:
ReactInstanceManager reactInstanceManager = getReactNativeHost().getReactInstanceManager();
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
if(reactContext != null) {
reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("url", params);
} else {
reactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext context) {
context.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit("url", params);
reactInstanceManager.removeReactInstanceEventListener(this);
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.