【发布时间】: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