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

Dialogflow聊天机器人安卓APP出现Objects.requireNonNull崩溃问题求解

报错截图

崩溃核心原因及修复方案

  1. RecyclerView未设置LayoutManager(你怀疑的代码段的问题根源)
    你代码中仅给RecyclerView设置了Adapter,没有配置LayoutManager,调用chatView.getLayoutManager()会返回null,Objects.requireNonNull()检测到空值就会直接抛出空指针异常导致崩溃。
    修复方式:在chatView.setAdapter(chatAdapter);前添加LayoutManager配置代码:
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
// 聊天内容默认从底部开始展示,符合聊天场景使用习惯
layoutManager.setStackFromEnd(true);
chatView.setLayoutManager(layoutManager);
  1. AsyncTask废弃导致的兼容问题
    代码中使用的SendMessageInBg继承自AsyncTask,该类在Android 11及以上系统已被正式废弃,存在内存泄漏、任务调度异常等问题,容易引发崩溃。
    修复方式:替换为协程、Thread+Handler或者OkHttp异步请求来实现Dialogflow接口的异步调用,同时增加页面销毁时的任务取消逻辑,避免后台任务返回后操作已销毁的页面。

  2. 初始化异常未处理引发的空指针
    setUpBot()方法如果抛出异常(比如credentials文件错误、读取失败),sessionsClient和sessionName会是null,此时点击发送消息直接传空值给后台任务会触发崩溃。
    修复方式:在发送消息前增加判空校验:

private void sendMessageToBot(String message) {
    // 先校验机器人初始化状态
    if (sessionsClient == null || sessionName == null) {
        Toast.makeText(this, "机器人初始化失败,请稍后重试", Toast.LENGTH_SHORT).show();
        return;
    }
    QueryInput input = QueryInput.newBuilder()
            .setText(TextInput.newBuilder().setText(message).setLanguageCode("en-US")).build();
    new SendMessageInBg(this, sessionName, sessionsClient, input).execute();
}
  1. 必要权限检查
    确认AndroidManifest.xml中已经添加网络权限,否则请求Dialogflow服务会直接崩溃:
<uses-permission android:name="android.permission.INTERNET" />

内容的提问来源于stack exchange,提问作者Daniele Giongo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:24:04