2017-03-02 62 views
0

我想爲Android創建反應本機模塊,但無法訪問模塊的方法。它會拋出錯誤「未定義不是對象」。我的代碼有什麼問題?無法使用我的React Native Android模塊中的方法

在這種情況下,我想在按下按鈕時調用foo()方法。

我的代碼是介紹如下:

TestModule.java

public class TestModule extends ReactContextBaseJavaModule { 
    public TestModule(ReactApplicationContext reactContext) { 
     super(reactContext); 
    } 

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

    @ReactMethod 
    public void foo(){ 

    } 
} 

TestPackage.java

public class TestPackage implements ReactPackage{ 
    @Override 
    public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) { 
     List<NativeModule> modules = new ArrayList<>(); 

     modules.add(new TestModule(reactContext)); 

     return modules; 
    } 

    @Override 
    public List<Class<? extends JavaScriptModule>> createJSModules() { 
     return null; 
    } 

    @Override 
    public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) { 
     return null; 
    } 
} 

MyApplication.java

public class MainApplication extends Application implements ReactApplication { 

     private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { 
      @Override 
      public boolean getUseDeveloperSupport() { 
      return BuildConfig.DEBUG; 
      } 

      @Override 
      protected List<ReactPackage> getPackages() { 
      return Arrays.<ReactPackage>asList(
       new MainReactPackage(),    
       new TestPackage(), //Added my TestPackage 
       new ToastPackage() 
      ); 
      } 
     }; 

     @Override 
     public ReactNativeHost getReactNativeHost() { 
      return mReactNativeHost; 
     } 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      SoLoader.init(this, /* native exopackage */ false); 
     } 
    } 

index.android.js

import React, { Component } from 'react'; 
import { 
AppRegistry, 
StyleSheet, 
Text, 
View, 
Button, 
NativeModules, 
} from 'react-native'; 

var toast = NativeModules.Toast; 
var test = NativeModules.TestModule; 

export default class RNModuleTest extends Component { 

    showToast(){ 
     toast.show("Hello from toast", toast.LONG); 
    } 

    showTest(){ 
     test.foo(); 
    } 

    render() { 
     return (
     <View style={styles.container}> 
      <Button title="Toast" onPress={this.showToast}/> 
      <Button title="testModule" onPress={this.showTest} /> 

     </View> 
     ); 
    } 
} 
+0

確保清理並重建gradle項目,您的代碼看起來很好 –

+0

如何清理gradle項目?我擦除了什麼? – user3348949

回答

0

我解決了它。

在TestPackage.java文件時,createJSModules()createViewManagers()方法應該返回Collections.emptyList()而不是返回null

相關問題