在ReactNative中创建android native模块时,“未定义不是函数”

Joh*_*son 6 react-native native-module

我正在遵循ReactNative Native Module Guide来编写可在JS端使用的java类。导出的方法show来自类ToastModule(导出为ToastAndroid)。该show方法是如下:

public void show(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}
Run Code Online (Sandbox Code Playgroud)

当我从Button onPress处理程序调用ToastAndroid.show时,将显示所有与toast按钮一起预期的工作。

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

const ToastAndroid = NativeModules.ToastAndroid

export default class App extends Component {

handleBTNPressed(){
  ToastAndroid.show('Awesome', ToastAndroid.SHORT);
}
render() {
  return (
    <View style={styles.container}>
      <Text style={styles.welcome}>
        Welcome to React Native!!
      </Text>
      <Button title='click me' onPress={()=>this.handleBTNPressed()}/>
    </View>
  );
 }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我进一步从

@ReactMethod
public void show(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}
Run Code Online (Sandbox Code Playgroud)

@ReactMethod
public void showAgain(String message, int duration) {
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}
Run Code Online (Sandbox Code Playgroud)

我遇到以下错误:“未定义不是函数”

在此处输入图片说明

如果我添加新的导出方法,则再次显示此错误:

@ReactMethod
public void showAgain2(String message, int duration) {
    String mes = "Hi " + message;
    Toast.makeText(getReactApplicationContext(), message, duration).show();
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我走错了哪一步?

编辑=========================

ToastAndroidReactNative中可能已经有一个,所以我将名称更改为MyToastExample。但是,现在错误变为以下

在此处输入图片说明

有人遇到同样的问题吗?

Har*_*lan 0

这一步中,检查你是否有导入权限ToastModule,因为ReactNative也有一个类叫ToastModule

检查该行是否import com.facebook.react.modules.toast.ToastModule;存在于*ReactPackage.java