【问题标题】:Can't use a method from my React Native Android Module无法使用我的 React Native Android 模块中的方法
【发布时间】:2017-03-02 18:44:17
【问题描述】:

我想为 Android 制作一个 react 原生模块,但我无法访问该模块的方法。它抛出错误“未定义不是对象”。我的代码有什么问题?

在这种情况下,我想在按下按钮时调用 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>
        );
    }
}

【问题讨论】:

  • 确保清理并重建 gradle 项目,您的代码看起来不错
  • 如何清理 gradle 项目?我要抹掉什么吗?

标签: javascript java android module react-native


【解决方案1】:

我解决了。

在 TestPackage.java 文件中,createJSModules()createViewManagers() 方法应该返回 Collections.emptyList() 而不是返回 null

【讨论】:

    猜你喜欢
    • 2023-01-03
    • 1970-01-01
    • 2019-11-26
    • 2017-10-11
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多