React Native官方Native Module示例无法运行,调用ToastExample.show()报错求助
解决React Native调用自定义Toast模块报错的问题
我仔细看了你的代码,以下几个地方可能是导致报错的原因,你可以逐一排查:
1. 为NativeModule添加@ReactModule注解(适配RN 0.60+版本)
在较新的React Native版本中,自定义NativeModule需要显式添加@ReactModule注解来声明模块名称,否则可能无法被RN框架正确识别和注册。修改你的ToastModule类:
import com.facebook.react.bridge.ReactModule; @ReactModule(name = "ToastExample") // 添加该注解,名称要和getName()返回值一致 public class ToastModule extends ReactContextBaseJavaModule { // ... 你的原有代码逻辑 }
2. 使用Activity上下文显示Toast(避免上下文状态异常)
有时候直接使用getReactApplicationContext()可能因为App处于后台等状态,导致Toast无法正常显示。改用当前活跃的Activity上下文试试:
@ReactMethod public void show(String message, int duration) { ReactApplicationContext appContext = getReactApplicationContext(); Activity currentActivity = getCurrentActivity(); // 优先使用Activity上下文,不存在时 fallback 到应用上下文 Context toastContext = currentActivity != null ? currentActivity : appContext; Toast.makeText(toastContext, message, duration).show(); }
3. 验证JS端模块是否正确加载
在调用Toast的页面中添加日志,确认模块是否被正常导出:
import ToastExample from './ToastExample'; console.log('ToastExample模块详情:', ToastExample); // 查看控制台输出是否包含show方法和SHORT常量 ToastExample.show('Awesome', ToastExample.SHORT);
如果控制台打印ToastExample为undefined,说明Android端模块未注册成功,需要检查:
CustomToastPackage的包路径是否正确,在MainApplication中是否正确导入- 执行
./gradlew clean后,重新运行npm run android(不要仅执行run-android,clean后需要完整构建)
4. 查看Logcat定位具体错误
最有效的方式是打开Android Studio的Logcat,搜索ToastExample或NativeModule相关的错误日志,比如:
Could not find NativeModule: ToastExample:说明模块未被正确注册AndroidRuntimeException:可能是Toast显示时的上下文或参数问题
这些日志能直接帮你定位到核心问题。
5. 确认RN版本兼容性
如果你的RN版本是0.68及以上,检查react-native和gradle版本是否匹配,确保NativeModule的API适配当前RN版本。
尝试完以上步骤后,应该能解决调用报错的问题。
内容的提问来源于stack exchange,提问作者han yang
相关产品推荐
相关产品推荐

