聊天界面

图灵机器人是一个智能机器人的开放平台,它提供了自动解析文字的API接口。创建一个机器人,就可以得到一个Key值,作为访问API的身份标识,下图的apikey就是图灵机器人对应的key值

注册完成后开始搭建项目

首先打开网络权限

只需在清单文件(AndroidManifest.xml)中添加允许访问网络权限
< uses-permission android:name=“android.permission.INTERNET”/>

界面布局

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="与机器人聊天"
android:gravity="center"
android:textSize="36sp"
android:background="#2894EB"/><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@+id/title"android:layout_above="@+id/ll"/>
<LinearLayoutandroid:id="@+id/ll"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="#1591C9"android:orientation="horizontal"android:layout_alignParentBottom="true"><EditTextandroid:id="@+id/etMsg"android:layout_width="0dp"android:layout_height="wrap_content"android:background="#fff"android:layout_weight="3"/><Buttonandroid:id="@+id/send"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="发送" />
</LinearLayout>
</RelativeLayout>

需要两个Item布局,分别显示机器人两天界面和用户聊天界面

机器人item

<?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="match_parent"><ImageViewandroid:id="@+id/ivRobot"android:layout_width="80dp"android:layout_height="60dp"android:src="@drawable/robot"/>
<TextViewandroid:id="@+id/tvMsg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="25sp"android:layout_toRightOf="@+id/ivRobot"/>
</RelativeLayout>

## 用户item

<?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="match_parent">
<ImageView
android:id="@+id/ivUser"
android:layout_width="80dp"
android:layout_height="60dp"
android:src="@drawable/man"
android:layout_alignParentRight="true"/>
<TextViewandroid:id="@+id/tvMsg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="25sp"android:layout_toLeftOf="@+id/ivUser"/></RelativeLayout>

封装聊天信息类

package com.fangkuai.chatrobot;

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;
}

}

编写适配器ChatAdapter

package com.fangkuai.chatrobot;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import java.util.List;

public class ChatAdapter extends BaseAdapter {
private List list;
private LayoutInflater inflater;

public ChatAdapter(Context context, List<ChatBean> list) {this.list = list;this.inflater = LayoutInflater.from(context);
}@Override
public int getCount() {return list == null ? 0 : list.size();
}@Override
public Object getItem(int position) {return list.get(position);
}@Override
public long getItemId(int position) {return position;
}@Override
public View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder=new ViewHolder();//根据消息的状态加载不同viewif (list.get(position).getState()==ChatBean.RECEIVE){//机器人布局convertView=inflater.inflate(R.layout.chatting_left_item,null);}else {//用户布局convertView=inflater.inflate(R.layout.chatting_right_item,null);}holder.message=convertView.findViewById(R.id.tvMsg);holder.message.setText(list.get(position).getMessage());return convertView;}
class ViewHolder{TextView message;              //聊天内容
}
}

向服务器请求数据需要用到okhttp库的OkHttpClient类,添加okhttp库:com.squareup.okhttp3:okhttp:4.8.0

在res/values的strings.xml文件中存放欢迎信息

<resources><string name="app_name">ChatRobot</string><string-array name="welcome"><item>亲爱的,想死我了,么么哒~</item><item>"更多资源,访问:http:myapptg.com</item><item>主人,人家好无聊呀,来陪我耍吧</item><item>"更多资源,请访问http:myapptg.com</item><item>主人,自从使用了高考助手,成绩是不是提高了呢?</item><item>小主人,你是不是学习累了,您可以输入,来个笑话,我可以为         您讲笑话哦</item><item>主人,你是不是上班疲惫了?您可以输入,讲故事,我可以为您讲一些有趣的故事哟</item><item>今天,我好累,不想和你聊天</item><item>小主人您复习的怎么样了?</item>
</string-array>
</resources>

界面交互代码

package com.fangkuai.chatrobot;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Paint;
import android.icu.text.UnicodeSetSpanner;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import org.jetbrains.annotations.NotNull;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity implementsView.OnClickListener {private List<ChatBean> list;
private ChatAdapter adapter;private static final String WEB_SITE = "http://www.tuling123.com/openapi/api";
//key值,注册机器人后获取
private static final String KEY = "5454285e1e094f7084353e3ba0955567";
private String[] welcome;                         //存储欢迎信息
private String sendMsg;                         //发送的信息
private static final int MSG_OK = 1;            //获取数据
private MHandler handler;private ListView lv;
private EditText etMsg;
private Button send;@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);list=new ArrayList<ChatBean>();welcome=getResources().getStringArray(R.array.welcome);handler=new MHandler();initView();}private void initView() {lv = (ListView) findViewById(R.id.lv);etMsg = (EditText) findViewById(R.id.etMsg);send = (Button) findViewById(R.id.send);adapter=new ChatAdapter(MainActivity.this,list);lv.setAdapter(adapter);//设置点击Enter键也能发送信息etMsg.setOnKeyListener(new View.OnKeyListener() {@Overridepublic boolean onKey(View v, int keyCode, KeyEvent event) {if (keyCode==KeyEvent.KEYCODE_ENTER&&event.getAction()==KeyEvent.ACTION_DOWN){sendData();}return false;}});int random= (int) ((Math.random())*welcome.length-1);       //获取随机数showData(welcome[random]);                                  //随机发送欢迎信息send.setOnClickListener(this);
}@Override
public void onClick(View v) {switch (v.getId()) {case R.id.send:sendData();break;}
}private void sendData() {sendMsg=etMsg.getText().toString();if (TextUtils.isEmpty(sendMsg)){Toast.makeText(MainActivity.this,"您为输入任何信息",Toast.LENGTH_SHORT).show();}//替换所有空行和换行符sendMsg=sendMsg.replaceAll(" ","").replaceAll("\n","").trim();etMsg.setText("");ChatBean bean=new ChatBean();bean.setState(ChatBean.SEND);bean.setMessage(sendMsg);list.add(bean);adapter.notifyDataSetChanged();getDataFromServer();
}//从服务器获取机器人发送的消息
private void getDataFromServer() {OkHttpClient okHttpClient=new OkHttpClient();Request request=new Request.Builder().url(WEB_SITE+"?key="+KEY+"&info="+sendMsg).build();Call call=okHttpClient.newCall(request);//异步线程访问网络call.enqueue(new Callback() {@Overridepublic void onFailure(@NotNull Call call, @NotNull IOException e) {}@Overridepublic void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {String res=response.body().string();Message message=new Message();message.obj=res;message.what=MSG_OK;handler.sendMessage(message);}});
}
//事件捕获
class MHandler extends Handler{@Overridepublic void dispatchMessage(@NonNull Message msg) {super.dispatchMessage(msg);switch (msg.what){case MSG_OK:if (msg.obj!=null){String result= (String) msg.obj;parseData(result);}break;}}
}//解析Json数据
private void parseData(String result) {try {JSONObject obj=new JSONObject(result);String content=obj.getString("text");           //获取机器人信息int code=obj.getInt("code");                    //获取服务器状态码updateView(code,content);                       } catch (JSONException e) {e.printStackTrace();showData("主人,网络不好哦");}
}private void updateView(int code, String content) {//code有很多种,可以cankao图灵机器人官网switch (code){case 4004:showData("主人,今天我累了,我要休息了,明天再来找我耍吧");break;case 40005:showData("主人,你说的是外星语吗?");break;case 40006:showData("主人,我今天要去约会哦,暂不接客啦");break;case 40007:showData("主人,明天再和你耍啦,我生病了,呜呜。。。。。。");default:showData(content);break;}
}private void showData(String data) {ChatBean bean=new ChatBean();bean.setState(ChatBean.RECEIVE);bean.setMessage(data);list.add(bean);adapter.notifyDataSetChanged();
}
//第一次点击时的时间
private long exitTime;@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode==KeyEvent.KEYCODE_BACK&&event.getAction()==KeyEvent.ACTION_DOWN){if ((System.currentTimeMillis()-exitTime)>2000){Toast.makeText(MainActivity.this,"再按一次退出",Toast.LENGTH_SHORT).show();exitTime=System.currentTimeMillis();}else {MainActivity.this.finish();System.exit(0);}}return super.onKeyDown(keyCode, event);
}
}

使用图灵机器人api接口开发智能聊天机器人相关推荐

  1. 机器人编程python代码_自己动手开发智能聊天机器人完全指南(附python完整源码)...

    一.前言 人工智能时代,开发一款自己的智能问答机器人,一方面提升自己的AI能力,另一方面作为转型AI的实战练习.在此把学习过程记录下来,算是自己的笔记. 二.正文 2.1 下载pyaiml 下载pya ...

  2. 聊天机器人mysql数据_自己动手开发智能聊天机器人完全指南(附完整源码)

    一.前言 本文是<自己动手开发智能聊天机器人完全指南(附完整源码)>的第二篇,也是21天实战人工智能系列<知识图谱完全项目案例剖析>里面的知识图谱应用的案例.前文中实现了一个最 ...

  3. 使用Dialogflow API构建Slack智能聊天机器人的指南

    介绍 自然语言处理(NLP)领域的突破近来出现了突然上升.我们可用的文本数据量巨大,数据科学家正在提出新的创新解决方案来解析它并分析模式.从编写整本小说到解码古代文本,我们已经看到了NLP的各种应用. ...

  4. 自己动手开发智能聊天机器人完全指南(附python完整源码)

    一.前言 人工智能时代,开发一款自己的智能问答机器人,一方面提升自己的AI能力,另一方面作为转型AI的实战练习.在此把学习过程记录下来,算是自己的笔记. 二.正文 2.1 下载pyaiml 下载pya ...

  5. 微软推出 AI 开发免费电子书,手把手教你构建智能聊天机器人

    日前,微软推出 AI 开发者免费电子书,教导大家利用微软 AI 平台开发智能聊天机器人.该电子书不长,核心内容共有四十多页,其中涵盖大量代码,相信对于 AI 初学者来说,这将是一本很有用的实战教程. ...

  6. itchat+在线聊天机器人接口实现微信聊天机器人

    闲来无事(其实还在期末考试),想着怎么利用手里的服务器搞点事情时,发现了python的itchat库,想着可以再利用网页聊天机器人,做一个自动聊天的微信机器人. 总体思路很简单,用itchat登录微信 ...

  7. AI中台——智能聊天机器人平台

    [宜信技术沙龙]是由宜信技术学院主办的系列技术分享活动,活动包括线上和线下两种形式,每期技术沙龙都将邀请宜信及其他互联网公司的技术专家分享来自一线的实践经验,分享内容覆盖金融科技及软件研发等主要技术领 ...

  8. python微信集成_Python微信公众号后台开发005:集成智能聊天机器人​

    ​给公众号集成一个智能聊天机器人 一.前述 ChatterBot是一个基于机器学习的聊天机器人引擎,构建在python上,主要特点是可以自可以从已有的对话中进行学(jiyi)习(pipei). 二.具 ...

  9. 微信小程序+OLAMI自然语言API接口制作智能查询工具--快递、聊天、日历等

    微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试.想来想去快递查询应该是一种比较普遍的需求. 如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你 ...

  10. 小程序智能聊天机器人(二)

    小程序实战之会员支付流程 背景 会员套餐设置 获取套餐 订单创建 支付订单申请 支付回调 更新用户权益 总结 背景 接上篇小程序智能聊天机器人(一), 无论何种程序,在我们没有其他收益来源时,用户付费 ...

最新文章

  1. 易生信-扩增子教程01-背景介绍
  2. linux基本命令之rsync
  3. Linux System Programming --Chapter Nine
  4. Spring Boot常见应用属性默认值
  5. 几道比较难的SQL题
  6. 如何仅凭 README 就名列 GitHub No.1 并收获上万 Star?
  7. MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
  8. 整理Java基础知识--数组2
  9. 产品设计体会(2002)产品设计的五个层次
  10. html网页设计作业代码web网页设计实例作业 ——放飞梦想文化主题(3页)
  11. WIN10禁用security center、自动更新、Defender Service
  12. 【接力题典1800记录】不定积分
  13. html中加pyecharts,如何在PPT中插入Pyecharts的图表?
  14. 三个工具测试网络速度
  15. Python Scrapy爬虫报错-Spider error processing
  16. 微商做引流产品怎么做效果更好?为什么他人的生意这么好而自己没有生意呢?
  17. 什么是基类,什么是父类
  18. 金蝶cloud后台数据库表说明
  19. pcie gen3 bios设置_公版RX5700刷RX 5700XT 显卡BIOS 的教程
  20. 计算机无法访问iTunes,iPhone连接电脑后iTunes无响应怎么办【解决方法】

热门文章

  1. iphone通讯录导入excel
  2. crmeb java单商户
  3. android中百分比显示_如何在菜单栏中显示Android的电池百分比
  4. 紫猫中控-脚本界面的基本设计和代码结构
  5. 华为服务器产品系列号查询,华为LIST全系列 服务器产品速查清单
  6. html设置div大小位置不变,div大小 div固定大小设置
  7. 比特大陆60天 :夺权、立威下的疯狂裁员
  8. ccy影响因子版270ms
  9. AI应用启示录:自动驾驶与“狼来了”的故事
  10. win2008 SP2下USB鼠标不能使用的一个解决方案