Android实现智能聊天机器人

编程之家收集整理的这篇文章主要介绍了Android实现智能聊天机器人编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

一、需求分析

1、业务需求分析

在这里插入图片描述

2、模型需求分析

在这里插入图片描述

3、界面需求分析

在这里插入图片描述

二、开发环境介绍

在这里插入图片描述

三、聊天功能业务实现

1、申请机器人身份标识

在这里插入图片描述

2、搭建聊天界面布局

在这里插入图片描述


整个界面最外层采用线性布局,在最大的LinearLayout中先设置了一个TextView用来显示聊天窗口的文本为机器人。

接着在TextView下面放置了一个RelativeLayout,在它里面先放置了一个ListView,用于显示聊天消息列表。

然后放置了一个小的RelativeLayout,里面放置了一个Button和一个EditText,Button在EditText右侧,文本为“发送”,作为发送按钮,EditText则是聊天输入框,在里面输入聊天内容

这样整个聊天界面的布局文件就搭建好了。如图所示:

在这里插入图片描述


activity_main的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:gravity="center"
        android:background="#0cc4e5"
        android:text="机器人"
        android:textColor="@android:color/white"
        android:textSize="20sp"/>
    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ListView
            android:id="@+id/list"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/rl_bottom"
            android:cacheColorHint="@android:color/black"
            android:divider="@null"
            android:listSelector="@null"
            android:transcriptMode="alwaysScroll"/>
        <RelativeLayout
            android:id="@+id/rl_bottom"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="@drawable/bottom_bg">
            <Button
                android:id="@+id/btn_send"
                android:layout_width="60dp"
                android:layout_height="40dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="10dp"
                android:background="@drawable/btn_send_selector"
                android:text="发送"
                android:textColor="@android:color/black"
                android:textSize="14sp"/>
            <EditText
                android:id="@+id/et_send_msg"
                android:layout_width="fill_parent"
                android:layout_height="40dp"
                android:layout_centerVertical="true"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_toLeftOf="@+id/btn_send"
                android:background="@drawable/send_msg_bg"
                android:singleLine="true"
                android:textColor="@android:color/black"
                android:textSize="18sp"/>
        </RelativeLayout>
    </RelativeLayout>
</LinearLayout>

3、搭建聊天条目布局

在这里插入图片描述


chatting_left_item文件为机器人聊天头像和聊天框显示文件,用于显示机器人的聊天内容

主要是在RelativeLayout中放置了一个ImageView和一个TextView,ImageView为机器人的头像图片robot_head,TextView 中的 style 设置为 style 文件夹中写好的格式文件 chat_content_style,background选择drawable中的chat_left_selector【鼠标选中消息,背景显示为深绿色,默认显示为绿色】。效果如图:

在这里插入图片描述


chatting_left_item代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="6dp">
    <ImageView
        android:id="@+id/iv_head"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:background="@drawable/robot_head"
        android:focusable="false"/>
    <TextView
        android:id="@+id/tv_chat_content"
        style="@style/chat_content_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_toRightOf="@+id/iv_head"
        android:background="@drawable/chat_left_selector" />
</RelativeLayout>

chatting_right_item文件用户聊天头像和聊天框显示文件,用于显示用户的聊天内容

和机器人的聊天条目相同。主要是在RelativeLayout中放置了一个ImageView和一个TextView,ImageView 为用户的头像图片 myhead ,TextView中的 style 为 style 中 chat_content_style,
background选择drawable中的chat_right_selector【鼠标选中消息,背景显示为灰色,默认显示为白色】。效果如图:

在这里插入图片描述


chatting_right_item代码如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="6dp">
    <ImageView
        android:id="@+id/iv_head"
        android:layout_width="65dp"
        android:layout_height="65dp"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:background="@drawable/myhead"
        android:focusable="false"/>
    <TextView
        android:id="@+id/tv_chat_content"
        style="@style/chat_content_style"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="5dp"
        android:layout_toLeftOf="@+id/iv_head"
        android:background="@drawable/chat_right_selector"/>

</RelativeLayout>

4、封装聊天信息实体类

在这里插入图片描述


在该类中创建机器人与用户聊天信息的属性。重写了get和set方法,消息的状态设为state,发送消息值设为1,接受消息值设为2。

public class ChatBean {
    public static final int SEND=1;//发送消息
    public static final int RECEIVE=2;//接收消息
    private int state;//消息的状态(是接收还是发送)
    private String message;//消息的内容

    public int getState() {
        return state;
    }

    public void setState(int state) {
        this.state = state;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

5、编写聊天列表适配器

由于聊天界面用了ListView控件显示聊天信息,因此需要创建一个数据适配器ChatAdapter对ListView控件进行数据适配。所以要创建一个ChatAdapter类。

getView方法内用if和else语句判断当前的消息是发送的消息还是接收到的消息,不同消息加载不同的view。如果是接收消息,说明就是机器人发的消息,那就加载左边布局;如果是发送消息,说明就是用户发的消息,则加载右边布局。

@Override
    public View getView(int position, View contentView, ViewGroup viewGroup) {
        Holder holder = new Holder();
        //判断当前信息是发送信息还是接收信息,根据不同信息加载不同布局文件
        if (chatBeanList.get(position).getState() == ChatBean.RECEIVE) {
        	//加载机器人对应的布局文件
            contentView = layoutInflater.inflate(R.layout.chatting_left_item, null);
        } else {
        	//加载用户对应的布局文件
           contentView = layoutInflater.inflate(R.layout.chatting_right_item,null);
        }
        //获取聊天内容控件,并设置控件的文本信息
        holder.tv_chat_content = (TextView) contentView.findViewById(R.id. tv_chat_content);
        holder.tv_chat_content.setText(chatBeanList.get(position).getMessage());
        return contentView;
    }

6、实现智能机器人通信

在这里插入图片描述


在RobotActivity中,创建了5个方法

(1)initView( ) 用于获取界面控件并初始化界面数据;

在这里插入图片描述


(2)showData( ) 用于显示欢迎信息到界面上;

在这里插入图片描述


(3)sendData ( ) 用于用户发送信息;

在这里插入图片描述


(4)getDataFromServer( ) 从服务器获取机器人的回复信息;

在这里插入图片描述


(5)updateView( ) 更新界面信息;

在这里插入图片描述


最后重写onKeyDown( )方法,在该方法中实现点击后退键退出智能聊天程序的功能

在这里插入图片描述

四、项目效果

1、进来会有随机的欢迎消息,可以在回复设置里面自定义

在这里插入图片描述


2、没有装中文输入法,所以就发个数字先,它会自动回复

在这里插入图片描述


3、发英文字母a,b,c,它会自动往下接,发e它会回句“额”。

在这里插入图片描述

五、项目总结

在本项目的实现过程中,熟悉了网络请求、JSON解析、Handler处理等知识点,这些知识点会在后来Android项目中经常使用,因此希望读者可以按照步骤完成此项目,通过熟练掌握本项目中的这些知识点,方便以后开发其他项目。

六、源码下载

需要源码学习的同学可以关注我的微信公众号,回复:聊天机器人,即可获取源码,还有很多Android项目等你来学习。

在这里插入图片描述

你遇见了什么人,什么时候找到一份工作,在哪里做了什么事,是努力还是堕落,事到如今,你回头想想,这些其实都是你对自己的安排。所有的昨日,才有了你所有的今日。 ​​​​

总结

以上是编程之家为你收集整理的Android实现智能聊天机器人全部内容,希望文章能够帮你解决Android实现智能聊天机器人所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群
编程之家官方2群
编程之家官方3群
编程之家官方4群

相关文章

猜你在找的Android相关文章

*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不
基本概念: I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。
*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不
*由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不
本文系作者自己学习之所用,文章内容仅出自作者拙劣之思考,问题之处烦请不吝指教。 在frameworksavmedialibmediamediaplayer.cpp中会有语句:const sp&
前言 最近Android对于文件的许多方法进行了修改,网络上又没有对Android4到Android11关于系统相机、系统相册和系统裁剪的适配方案,我花了几天事件总结了一下,先上源码 DEMO源码 先
1.使用内部存储 Android系统能够直接把文件存在设备的内部存储内。 默认情况下,保存在内部存储内的文件是应用程序私有的,其他应用程序(或用户)是无法访问的。 当用户卸载此应用程序时,内部存储的数
Android开发过程中,发现一个小问题,当我们点击屏幕下面的输入框时,我们的RadioGroup会跑到输入法的上面去,如下图 两种解决方法 1、Manifest.xml文件activity标签中添加
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注