我的对话流聊天机器人应用程序的 Objects.requireNonNull 问题

     2023-04-18     241

关键词:

【中文标题】我的对话流聊天机器人应用程序的 Objects.requireNonNull 问题【英文标题】:Objects.requireNonNull problem with my dialogflow chatbot app 【发布时间】:2021-12-27 15:25:02 【问题描述】:

这是错误:

该应用程序是一个带有对话流聊天机器人的界面。当我设置一些文本并尝试发送它时,应用程序正在崩溃。可能是因为有一些过时的代码,但我在互联网上找不到解决方案。

顺便说一句,这是 MainActivity.java:

public class MainActivity extends AppCompatActivity implements BotReply 

RecyclerView chatView;
ChatAdapter chatAdapter;
ArrayList<Message> messageList = new ArrayList<>();
EditText editMessage;
Button btnSend;

//dialogFlow
private SessionsClient sessionsClient;
private SessionName sessionName;
private final String uuid = UUID.randomUUID().toString();


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    chatView = findViewById(R.id.rv_message);
    editMessage = findViewById(R.id.et_message);
    btnSend = findViewById(R.id.btn_mic);

    chatAdapter = new ChatAdapter(messageList, this);
    chatView.setAdapter(chatAdapter);

    btnSend.setOnClickListener(new View.OnClickListener() 
        @Override public void onClick(View view) 
            String message = editMessage.getText().toString();
            if (!message.isEmpty()) 
                messageList.add(new Message(message, false));
                editMessage.setText("");
                sendMessageToBot(message);
                Objects.requireNonNull(chatView.getAdapter()).notifyDataSetChanged();
                Objects.requireNonNull(chatView.getLayoutManager())
                        .scrollToPosition(messageList.size() - 1);
             else 
                Toast.makeText(MainActivity.this, "Please enter text!", Toast.LENGTH_SHORT).show();
            
        
    );

    setUpBot();


private void setUpBot() 
    String TAG = "mainactivity";
    try 
        InputStream stream = this.getResources().openRawResource(R.raw.credentials);
        GoogleCredentials credentials = GoogleCredentials.fromStream(stream)
                .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
        String projectId = ((ServiceAccountCredentials) credentials).getProjectId();

        SessionsSettings.Builder settingsBuilder = SessionsSettings.newBuilder();
        SessionsSettings sessionsSettings = settingsBuilder.setCredentialsProvider(
                FixedCredentialsProvider.create(credentials)).build();
        sessionsClient = SessionsClient.create(sessionsSettings);
        sessionName = SessionName.of(projectId, uuid);

        Log.d(TAG, "projectId : " + projectId);
     catch (Exception e) 
        Log.d(TAG, "setUpBot: " + e.getMessage());
    




private void sendMessageToBot(String message) 
    QueryInput input = QueryInput.newBuilder()
            .setText(TextInput.newBuilder().setText(message).setLanguageCode("en-US")).build();
    new SendMessageInBg(this, sessionName, sessionsClient, input).execute();




@Override
public void callback(DetectIntentResponse returnResponse) 
    if(returnResponse!=null) 
        String botReply = returnResponse.getQueryResult().getFulfillmentText();
        if(!botReply.isEmpty())
            messageList.add(new Message(botReply, true));
            chatAdapter.notifyDataSetChanged();
            Objects.requireNonNull(chatView.getLayoutManager()).scrollToPosition(messageList.size() - 1);
        else 
            Toast.makeText(this, "something went wrong", Toast.LENGTH_SHORT).show();
        
     else 
        Toast.makeText(this, "failed to connect!", Toast.LENGTH_SHORT).show();
    

我认为问题出在这里:

Objects.requireNonNull(chatView.getAdapter()).notifyDataSetChanged();
Objects.requireNonNull(chatView.getLayoutManager()).scrollToPosition(messageList.size() - 1);

如果您需要其他内容,请咨询!谢谢

【问题讨论】:

似乎 chatView.getAdapter()chatView.getLayoutManager 返回 null。如果您确定参数不为空(或者您正在构建 API 并且 API 合同中的变量不为空),则应仅使用 Objects.requireNonNull 【参考方案1】:

如果messageList 默认为空(看起来确实如此),则您有一个空的回收器视图,因此日志中没有非致命错误通知您回收器视图缺少布局管理器。将布局管理器设置为您的 chatView 回收站视图,应该就足够了。

...
chatAdapter = new ChatAdapter(messageList, this);
chatView.setAdapter(chatAdapter);

// Add these two lines
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
chatView.setLayoutManager(layoutManager);

btnSend.setOnClickListener(new View.OnClickListener() 
...

【讨论】:

如何将对话流与网站集成?

...】:2018-12-0908:05:53【问题描述】:我使用“Dialogflow聊天机器人”创建了意图、实体等,现在,我正在尝试将dialogflow与我的网站(html)集成,我遵循了dialogflow官方网站上的文档说明,但我仍然在困惑,启用网络演示选项后,如... 查看详情

如何不将 Facebook 聊天机器人与正常对话混为一谈

】如何不将Facebook聊天机器人与正常对话混为一谈【英文标题】:Howtodon\'tmixFacebookchatbotwithnormalconversations【发布时间】:2018-06-2218:30:36【问题描述】:我正在创建一个Facebook聊天机器人,以我的Facebook页面的名义进行交谈。客户... 查看详情

对话流和 C#。如何获得代理的回复?

...时间】:2019-10-2716:34:37【问题描述】:我想用C#编写一个应用程序,我可以在其中向我的机器人发送消息并获得响应。如何发送请求并从Dialogflow机器人获得响应?请,如果你知道帮助我)谢谢【问题讨论】:到目前为止你有没有... 查看详情

智能聊天机器人技术研究与应用

文章大纲1.聊天机器人简介聊天机器人进化历史聊天机器人核心技术2.预训练模型与聊天机器人研究进展transfomer架构回顾预训练对话模型case1:个性化对话生成case2:半监督学习对话策略3.知识图谱与智能问答4.智能聊天机器人应... 查看详情

智能聊天机器人技术研究与应用

文章大纲1.聊天机器人简介聊天机器人进化历史聊天机器人核心技术2.预训练模型与聊天机器人研究进展transfomer架构回顾预训练对话模型case1:个性化对话生成case2:半监督学习对话策略3.知识图谱与智能问答4.智能聊天机器人应... 查看详情

chatgpt-聊天机器人

第3章ChatGPT-聊天机器人3.1聊天机器人的定义与发展聊天机器人是一种基于人工智能技术的智能对话系统,旨在模仿人类的对话方式与用户进行交互。聊天机器人可以通过自然语言处理技术和机器学习算法分析用户的输入,理解用... 查看详情

如何存储和检索对话流的聊天记录?

】如何存储和检索对话流的聊天记录?【英文标题】:Howtostoreandretrievethechathistoryofthedialogflow?【发布时间】:2018-09-1420:55:09【问题描述】:我想将聊天从Google对话流重定向到人类。为此,我想获取用户进行的对话的历史记录。有... 查看详情

vue-miniqq——基于vue2实现的仿手机qq单页面应用(接入了聊天机器人,能够进行正常对话)

...是QQ总要能进行对话交流,所以在项目中接入了图灵聊天机器人,可以与列表中的每个人物进行对话。左滑删除 查看详情

最简单的聊天机器人人机互动对话代码。

工具:eclipse;JAVAJDK;语言:java作者:蛋白时间:2016.11.231importjava.util.Scanner;23//下面是一个最简单的人机互动对话代码,最简单的聊天机器人。4publicclassa{5publicstaticvoidmain(String[]args){6Scannerscan=newScanner(System.in);7Stringtalk=sc 查看详情

带语音的 Lex 聊天机器人 C# 客户端

】带语音的Lex聊天机器人C#客户端【英文标题】:LexchatbotC#clientwithvoice【发布时间】:2017-07-1105:40:55【问题描述】:我有运行文本的聊天机器人客户端,但现在想将其更改为语音,但我不确定如何从麦克风获取流以进行发布。为... 查看详情

使用python实现一个简单的智能聊天机器人(代码片段)

...明最近两天需要做一个python的小程序,就是实现人与智能机器人(智能对话接口)的对话功能,目前刚刚测试了一下可以实现,就是能够实现个人与机器的智能对话(语音交流)。总体的思路大家可以设想一下,如果要... 查看详情

WhatsApp 聊天机器人和其他渠道中的自适应对话框

】WhatsApp聊天机器人和其他渠道中的自适应对话框【英文标题】:AdaptivedialoginWhatsAppchatbotandotherchannels【发布时间】:2021-12-2318:16:06【问题描述】:您好,我们正在使用机器人框架开发聊天机器人,并与WhatsApp、Google商业消息、Fac... 查看详情

使用chatterbot库制作一个聊天机器人

...杂烩我们学习一些如何使用ChatterBot库在Python中创建聊天机器人,该库实现了各种机器学习算法来生成响应对话,还是挺不错的1什么是聊天机器人聊天机器人也称为聊天机器人、机器人、人工代理等,基本上是由人工... 查看详情

【5g消息】啥是chatbot?

chatbot聊天机器人聊天机器人(Chatterbot)是经由对话或文字进行交谈的计算机程序。能够模拟人类对话,通过图灵测试。聊天机器人可用于实用的目的,如客户服务或资讯获取。参考技术Achatbot是面向行业客户开放的一种5g消息的... 查看详情

「比人还会聊天」百度plato对话机器人开放体验

...内置业界首个突破百亿级参数的对话大模型PLATO-XL的对话机器人,一经问世就给大家带来了不一般的对话体验。它可以俏皮可爱、也可以老练深沉,既能陪你谈家长里短,也能陪你聊诗词歌赋。百度PLATO对话机器人以... 查看详情

「比人还会聊天」百度plato对话机器人开放体验

...内置业界首个突破百亿级参数的对话大模型PLATO-XL的对话机器人,一经问世就给大家带来了不一般的对话体验。它可以俏皮可爱、也可以老练深沉,既能陪你谈家长里短,也能陪你聊诗词歌赋。百度PLATO对话机器人以... 查看详情

刷新网页后无法恢复聊天(对话流)

】刷新网页后无法恢复聊天(对话流)【英文标题】:Unabletorestorechatafterrefreshingwebpage(dialogflow)【发布时间】:2021-10-0808:36:37【问题描述】:<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Hello</title> 查看详情

C# Lync/Skype for Business 聊天机器人自动消息

】C#Lync/SkypeforBusiness聊天机器人自动消息【英文标题】:C#Lync/SkypeforBusinesschatbotautomessage【发布时间】:2017-09-0804:56:22【问题描述】:我有一个正常工作的机器人,但我想弄清楚如何通过我的机器人发起对话,当她在SkypeforBusiness... 查看详情