2017-03-02 8 views
0

Android用のネイティブモジュールを作成したいのですが、モジュールのメソッドにアクセスできません。 "Undefined is not object"というエラーがスローされます。私のコードで何が間違っていますか?React Native Android Moduleのメソッドを使用できません

この場合、ボタンを押したときに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を返すべきです。

関連する問題