Android开发之智能聊天机器人

Android开发之智能聊天机器人

  • 一:效果图
  • 二:注册图灵机器人,获取api
    • 1.进入图灵机器人官网注册,已有账号的可直接登录
    • 2.点击创建机器人
    • 3.创建好机器人之后会得到一个ApiKey(如图所示)
    • 4.下面就要拼接Api地址了(拼接方法如图所示)
  • 三.下面就是具体实现的代码了
    • 1.首先是布局文件(activity_main)
    • 2.左布局文件(leftitem)
    • 3.右布局文件(rightitem)
    • 4.bg_edittext_selector.xml
    • 5.bg_button.xml
    • 6.HttpData
    • 7.HttpGetDataListener
    • 8.ListData
    • 9.TextAdapter
    • 10.主java文件(MainActivity)
    • 11.还需要注意申请网络权限,放在AndroidManifest.xml中
  • 四、资源下载

Android实现智能聊天机器人
最近在做项目中,突然来了灵感,要做一个聊天机器人.聊天机器人在很多大型App上都有使用,比如QQ群里的QQ小冰,淘宝京东等App上在没有人工客服之前会有机器人跟你聊天,根据你发的问题关键词,向你推荐一些答案,可以省下很多人工的时间以及减小服务器的压力。

此功能主要原理:
1.接入图灵机器人api,拼接上你输入框的消息;

2.根据api完成网络请求消息的接收与发送

3.完成布局页面

4.实现你和小洛的对话
废话不多说,直接上图和代码

一:效果图

在这里插入图片描述

二:注册图灵机器人,获取api

1.进入图灵机器人官网注册,已有账号的可直接登录

在这里插入图片描述

2.点击创建机器人

在这里插入图片描述

3.创建好机器人之后会得到一个ApiKey(如图所示)

在这里插入图片描述

4.下面就要拼接Api地址了(拼接方法如图所示)

拼接方法:http://www.tuling123.com/openapi/api?key=你自己的apikey&info=你要发送的话&userid=你自己的唯一标示(在代码中会指出)
在这里插入图片描述

三.下面就是具体实现的代码了

1.首先是布局文件(activity_main)

在这里插入图片描述

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><!-- transcriptMode 自动向下滚动    alwaysScroll一直向下滚动状态;   divider设置间隔线效果 ;   listSelector设置没有滑动效果 --><ListViewandroid:id="@+id/lv"android:layout_width="fill_parent"android:layout_height="0dp"android:layout_weight="1"android:divider="@null"android:listSelector="@android:color/transparent"android:transcriptMode="alwaysScroll" ></ListView><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#229dec"android:orientation="horizontal" ><EditTextandroid:id="@+id/et_sendText"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginLeft="7dp"android:layout_weight="1"android:background="@drawable/bg_edittext_selector"android:paddingBottom="7dp"android:paddingTop="7dp" /><Buttonandroid:id="@+id/btn_send"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_margin="7dp"android:background="@drawable/bg_button"android:text="发送" /></LinearLayout></LinearLayout>

2.左布局文件(leftitem)

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tv_time"android:layout_width="fill_parent"android:gravity="center_horizontal"android:layout_height="wrap_content"/><ImageViewandroid:id="@+id/iv"android:layout_width="70dp"android:layout_height="70dp"android:layout_alignParentLeft="true"android:layout_below="@id/tv_time"android:paddingLeft="10dp"android:paddingRight="10dp"android:src="@drawable/by2" /><TextViewandroid:layout_below="@id/tv_time"android:layout_marginTop="10dp"android:layout_marginRight="10dp"android:layout_toRightOf="@id/iv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="10dp"android:id="@+id/tv"android:gravity="center"android:background="@drawable/left"/></RelativeLayout>

3.右布局文件(rightitem)

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/tv_time"android:layout_width="fill_parent"android:gravity="center_horizontal"android:layout_height="wrap_content" /><ImageViewandroid:id="@+id/iv"android:layout_width="70dp"android:layout_height="70dp"android:layout_alignParentRight="true"android:layout_below="@id/tv_time"android:paddingLeft="10dp"android:paddingRight="10dp"android:src="@drawable/by5" /><TextViewandroid:id="@+id/tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@id/tv_time"android:layout_marginLeft="10dp"android:layout_marginTop="14dp"android:layout_toLeftOf="@id/iv"android:background="@drawable/right"android:gravity="center"android:padding="12dp" />
</RelativeLayout>

4.bg_edittext_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><solid android:color="#FFFFFF" /><corners android:radius="5dip" /><strokeandroid:width="1dip"android:color="#BDC7D8" /></shape>

5.bg_button.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" ><solid android:color="#80cccf" /> <!-- 背景色 --><strokeandroid:width="0.01dp"android:color="#80cccf" />  <!-- 邊框的顏色 --><cornersandroid:bottomLeftRadius="5dp"android:bottomRightRadius="5dp"android:topLeftRadius="5dp"android:topRightRadius="5dp" /></shape>

6.HttpData

package robot.com.myapplication;
import android.os.AsyncTask;
import android.util.Log;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;/****/
public class HttpData extends AsyncTask<String, Void, String> {private HttpClient httpClient;private HttpGet httpGet;private HttpResponse httpResponse; //��ȡ���󷵻ص�����private HttpEntity httpEntity;//����httpʵ��private InputStream in; //����ȡ��������ת��Ϊ���ļ�private HttpGetDataListener listener;//ʵ���Զ����HttpGetDataListener�ӿ�,���ҹ��컯���ݲ���private String url;public HttpData(String url ,HttpGetDataListener listener) {this.url = url;this.listener = listener;}@Overrideprotected String doInBackground(String... params) {//ʵ�ֽӿں���д�˷���,�˷����������ǣ�����get����󣬻�ȡ����try {httpClient = new DefaultHttpClient();//ʵ�����ͻ���httpGet =  new HttpGet(url);//ʹ��get��ʽ��ͨ������URL������httpResponse = httpClient.execute(httpGet); //ͨ���ͻ��˷�������httpEntity = httpResponse.getEntity();//ͨ��httpResponse�����ȡ����Log.i("haha1", "----------"+httpEntity.toString());in = httpEntity.getContent();//��ȡʵ��ľ�������BufferedReader br = new BufferedReader(new InputStreamReader(in));//��ȡ���������ݺ�ͨ�����������ж�ȡLog.i("haha2", "----------"+br.toString());String line = null; //��ȡ����StringBuffer sb = new StringBuffer();//������������while((line  = br.readLine()) != null){ //��ȡ������������sb.append(line); //�洢���ݵ�StringBuffer��}Log.i("haha3", "----------"+sb.toString());return sb.toString();//ת��ΪString����} catch (Exception e) {// TODO: handle exception}return null;}/**����* ��д�˷�����ͨ���ⷽ����ȡ����*/@Overrideprotected void onPostExecute(String result) {listener.getDataUrl(result);//��������Log.i("haha4", "----------"+result);super.onPostExecute(result);}
}

7.HttpGetDataListener

package robot.com.myapplication;public interface HttpGetDataListener {void getDataUrl(String data);
}

8.ListData

package robot.com.myapplication;
/****/
public class ListData {public static final int  SEND = 1;public static final int  RECEIVE = 2;private String content;private int flag;//��ʶprivate String time;public ListData(String content, int flag, String time) {setContent(content);setFlag(flag);setTime(time);}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getFlag() {return flag;}public void setFlag(int flag) {this.flag = flag;}public String getTime() {return time;}public void setTime(String time) {this.time = time;}}

9.TextAdapter

package robot.com.myapplication;import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.RelativeLayout;
import android.widget.TextView;import java.util.List;/****/
public class TextAdapter extends BaseAdapter{private List<ListData> lists;//���ϵ���������private Context mContext;//�н������ĵ�Contextprivate RelativeLayout layout;public TextAdapter(List<ListData> lists, Context mContext) {this.lists = lists;this.mContext = mContext;}@Overridepublic int getCount() {//����lists�����ص�����return lists.size();}@Overridepublic Object getItem(int position) {return lists.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {LayoutInflater inflater = LayoutInflater.from(mContext);if(lists.get(position).getFlag() == ListData.RECEIVE){layout = (RelativeLayout) inflater.inflate(R.layout.leftitem, null);}if(lists.get(position).getFlag() == ListData.SEND){layout = (RelativeLayout) inflater.inflate(R.layout.rightitem, null);}TextView tv = (TextView) layout.findViewById(R.id.tv);//�Ի�textViewTextView tv_time = (TextView) layout.findViewById(R.id.tv_time);//ʱ��textViewtv.setText(lists.get(position).getContent());  //���������ݷ��MTextView��tv_time.setText(lists.get(position).getTime());//���¼�д��TextViewreturn layout;}}

10.主java文件(MainActivity)

package robot.com.myapplication;import android.view.View;import java.text.SimpleDateFormat;
import java.util.Date;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import org.json.JSONException;
import org.json.JSONObject;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;public class MainActivity extends AppCompatActivity implementsHttpGetDataListener,View.OnClickListener {private HttpData httpData;// �첽�������private List<ListData> lists;private ListView lv;private EditText et_sendText;private Button btn_send;private String content_str; // �惦��EditText�@ȡ���Ĕ���private TextAdapter adapter;private String[] welcome_arry;//��ӭ��private double currentTime,oldTime = 0;//�Ի�ʱ��@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i("haha7", "----------7");initView();Log.i("haha8", "----------8");}/*** ʵ��������*/private void initView(){lists = new ArrayList<ListData>();lv = (ListView) findViewById(R.id.lv);et_sendText = (EditText) findViewById(R.id.et_sendText);btn_send = (Button) findViewById(R.id.btn_send);btn_send.setOnClickListener(this);adapter = new TextAdapter(lists, this);lv.setAdapter(adapter);//��adapterListData listData;listData = new ListData(getRandomWelcomeTips(),ListData.RECEIVE, getTime());lists.add(listData);//��ӻ�ӭ��}/*** ���û�ӭ��*/public String getRandomWelcomeTips(){
//        String welcome_tip = null;
//        welcome_arry = this.getResources().getStringArray(getResources().getString(R.string.welcome_tips));//��string.xml�л�ȡ��Ϊwelcome_tips���ַ�������
//        int index = (int)(Math.random()*(welcome_arry.length - 1));//��ȡһ�������
//        welcome_tip = welcome_arry[index];return getResources().getString(R.string.welcome_tips);}/*** ����ʱ��* @return*/private String getTime(){currentTime = System.currentTimeMillis();SimpleDateFormat format = new SimpleDateFormat("yyyy��MM��dd��   HH:mm:ss");Date curDate = new Date();String str = format.format(curDate);if(currentTime - oldTime >= 5*60*1000){//�������5���ӣ���ʾʱ��oldTime = currentTime;return str;}else{return "";}}@Overridepublic void getDataUrl(String data) {Log.i("haha---data=","------" + data);parseText(data);}public void parseText(String str){//����jsontry {JSONObject jb = new JSONObject(str);ListData listData;listData = new ListData(jb.getString("text"),ListData.RECEIVE, getTime());lists.add(listData);adapter.notifyDataSetChanged();//�����m�䣿��} catch (JSONException e) {e.printStackTrace();}}@Overridepublic void onClick(View v) {getTime();//����ʱ��content_str = et_sendText.getText().toString();//�@ȡEditText����et_sendText.setText("");String dropk = content_str.replace(" ", "");//ȥ���ո�String droph = dropk.replace("\n", "");//ȥ���س�ListData listData;listData = new ListData(content_str, ListData.SEND, getTime());lists.add(listData);Log.i("haha9", "----------content_str="+content_str);adapter.notifyDataSetChanged();//ˢ��Log.i("haha6", "----------content_str="+content_str);httpData = (HttpData) new HttpData("http://www.tuling123.com/openapi/api?key=02dfb86de93f8a3e81dabd214a50c8fa&info=" + droph + "&userid=15602229049",this).execute();// �����Ѿ�ȥ���ո�ͻس�content_str������droph   ; execute()�����첽ͨ��Log.i("haha5", "----------"+httpData);if(lists.size() > 30){//�����Ļ�ϵĶԻ����ݶ���30�����Ƴ�ǰ�������for (int i = 0; i < lists.size(); i++) {lists.remove(i);}}}}

11.还需要注意申请网络权限,放在AndroidManifest.xml中

  <uses-permission android:name="android.permission.INTERNET" />

四、资源下载

下载地址:Android开发之智能聊天机器人
至此,一个智能聊天机器人就实现了,你可以尽情的和它玩耍了,记住别玩坏了哦😏😏😏
不懂的地方可以问我哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/36404.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

■ Android集成百度语音识别

实现这个功能的目的,是我看见我公司硬件工程师给客户回答问题的时候用公司研发的APP,每次都是手动输入打字,看着他带着老花镜的样子,于心不忍,毕竟咱就是干这个的. 实现效果 集成 百度语音实时识别 https://ai.baidu.com/sdk#asr AndroidManifest.xml 文件 <uses-permis…

百度云助力微信小程序图文识别,让你的应用更加高效智能

前言 如今人们对于信息的获取需求越来越高&#xff0c;而图像识别技术的发展为我们带来了更加便捷高效的信息获取方式。微信小程序作为一种新型的应用形态&#xff0c;越来越受到用户的青睐。而本文将为大家介绍微信小程序基于百度云的图文识别技术。让我们一起来看看微信小程序…

chatGPT 和AlphaGo下围棋,谁赢?垂域大模型有戏么?

这边来的少&#xff0c;但发个文章通报下近况&#xff0c;长期做AI产研、投融资工作后&#xff0c;后续主要在企业数字化与大模型结合的方向上&#xff0c;后续进展还是请关注&#xff1a;琢磨事。 上一篇提到最终大模型的格局很可能是有一个偏通用大模型&#xff0c;比如chatG…

chatgpt赋能python:用Python实现高效搜索文献

用Python实现高效搜索文献 作为研究学者&#xff0c;面对日益增多的文献量&#xff0c;如何高效地搜索文献成为了一大难题。然而&#xff0c;Python的强大功能和丰富的科学计算库为我们提供了一种新的解决方案。本文将介绍如何使用Python进行文献搜索&#xff0c;帮助广大学者…

浅浅了解一下SSM框架,全网最新

一.SSM框架初体验 作为当下流行的企业开发MVC开源框架&#xff0c;SSM框架是我们Java程序猿必须熟练掌握的知识点, SSM框架是spring MVC &#xff0c;spring和mybatis框架的整合. SSM框架是标准的MVC模式&#xff0c;将整个系统划分为表现层&#xff0c;controller层&#x…

浅浅的分享一下2022年ISCC

WEB 冬奥会&#xff1a;你来参加2022届冬奥会&#xff0c;想知道冬奥会的主办方想告诉你什么吗&#xff1f;题目入口&#xff1a;59.110.159.206:7060 我们根据审计可知需要我们构造 josn 然后 get 传参&#xff0c;需要绕过的地方&#xff1a; 1.is_numeric()对 year 的过滤…

冷热数据浅浅见

冷热数据浅浅见 一、前言二、冷热数据的标准&#xff08;判断&#xff09;三、判断冷热数据的算法3.1 基于数据结构特点的判断算法3.1.1 传统的方法3.1.2 改进的方法 3.2 基于统计学上的判断算法3.3 基于机器学习的判断算法 四、总结五、参考 一、前言 这个星期看了关于目前数…

商汤日日新大模型90天大升级!CEO现场整活,主打突破想象力

金磊 发自 WAIC量子位 | 公众号 QbitAI 商汤“日日新”AI大模型&#xff0c;如其名&#xff0c;真的做到了日日新。 这不&#xff0c;从发布到现在&#xff0c;时隔仅仅3个月&#xff0c;商汤便正式宣布&#xff1a; 商汤日日新&#xff08;SenseNova&#xff09;大模型体系全面…

一张快照就能还原出一段视频!AAAI 2023论文提出快照压缩成像新算法 | 开源

飞晔 投稿量子位 | 公众号 QbitAI 随着光学算法发展&#xff0c;如今我们用低维传感器也能“捕获”高维信号了。 举个例子&#xff0c;这是我们用2D传感器拍到的一张“照片”&#xff0c;看起来充满了噪声数据&#xff1a; 然而&#xff0c;正是通过这张“照片”所包含的数据&a…

微信春节大数据出炉:《三体》阅读量第一 ;曝iOS 17应用商店将向第三方开放;斯坦福大学推出DetectGPT|极客头条

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&…

chatgpt赋能python:Python如何输出彩色的文字

Python如何输出彩色的文字 介绍 Python是一种高级编程语言&#xff0c;它广泛用于数据处理、人工智能、机器学习等各种领域。在Python编程中&#xff0c;输出信息是非常重要的部分。而有时&#xff0c;我们可能希望将输出的信息以不同的颜色呈现&#xff0c;以便更好地区分不…

视觉媒体通信——无损视频播放器

0 前言 我想&#xff0c;看这篇文章的朋友十有八九是在大三下选了这门课。那么我首先祝贺你们&#xff0c;即将结束美好的大学时光。以前听说这门课很难&#xff0c;但是这门课最大的诱惑就是没有期末考试~&#xff0c;所以我当初就选了。我也很担心自己不会做&#xff0c;但是…

chatgpt赋能python:Python绘制彩色线条的详细教程

Python绘制彩色线条的详细教程 简介 Python作为一门高级编程语言&#xff0c;可以用于许多不同领域的应用程序。其中&#xff0c;绘图是Python中很有用的一个应用领域。本文将介绍如何使用Python绘制彩色线条的方法&#xff0c;以及这对于数据可视化有多么重要。 方法 使用…

chatgpt赋能python:Python彩色转黑白简介

Python彩色转黑白简介 Python是一种高级编程语言&#xff0c;提供了许多内置功能和库来进行图像处理。其中之一就是彩色转黑白。彩色图像是RGB&#xff08;红色&#xff0c;绿色和蓝色&#xff09;通道的混合&#xff0c;而黑白图像则只有灰度值。 在本篇文章中&#xff0c;我…

chatgpt赋能Python-python_print_彩色

Python打印彩色文本&#xff1a;给你的代码添加亮丽的色彩 如果你是一位具备10年Python编程经验的工程师&#xff0c;那么你一定知道在Python中如何使用print函数输出文本。但是&#xff0c;你是否知道如何打印出彩色的文本&#xff1f;这样一来&#xff0c;你的代码就会变得更…

chatgpt赋能python:Python彩色字体介绍

Python彩色字体介绍 Python是一种高级编程语言&#xff0c;启发式风格的语法使其成为学习编程的理想选择。本文将介绍如何在Python代码中使用彩色字体。如果您是Python编程初学者&#xff0c;这篇文章将对您有所帮助。 什么是彩色字体&#xff1f; 彩色字体是一种添加颜色信…

chatgpt赋能python:Python彩色图像处理

Python彩色图像处理 Python是一门富有表现力语法和丰富库的语言&#xff0c;因此它成为了许多图像处理和计算机视觉任务的首选语言。其中&#xff0c;Python彩色图像处理已经被广泛应用&#xff0c;如图像滤波&#xff0c;图像分割&#xff0c;图像增强等。本文将介绍Python彩…

chatgpt赋能python:Python绘制彩色蟒蛇

Python绘制彩色蟒蛇 如果你曾经看过蟒蛇的图片&#xff0c;那么你会发现这种动物的图案非常独特。如何使用Python编程语言&#xff0c;绘制出这种非常具有特征的蟒蛇形状呢&#xff1f;在这篇文章中&#xff0c;我们将会介绍如何使用Python绘制彩色蟒蛇的方法。 加载必要的库…

chatgpt赋能python:Python色彩空间转换-介绍

Python 色彩空间转换 - 介绍 在图像处理中&#xff0c;色彩空间指的是颜色表示的方式。常见的色彩空间有 RGB、HSV、YUV 等。在图像处理中&#xff0c;经常需要进行不同色彩空间之间的转换。Python 提供了强大的图像处理库 Pillow&#xff0c;可以进行色彩空间的转换。 Pytho…

Unity实战篇 | 接入 声网SDK 实现 音频通话 —— 自己动手做一个 语音聊天房

目录 🐱‍🏍前言🎂Unity 接入 声网SDK 实现 音频通话第1️⃣步,创建声网应用第2️⃣步,获取相应的SDK第3️⃣步,将SDK接入Unity中第4️⃣步:搭建一个测试场景,编写测试代码第5️⃣步:音频通话API第6️⃣步:效果测试🎨总结🐱‍🏍前言 最近正好在网上看到声网…