You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:32:23