博舍

AS+图灵机器人官网+HTTP POST(json)+JsonReader实现安卓课设《智能聊天机器人》填坑记录 图灵机器人软件下载官网

AS+图灵机器人官网+HTTP POST(json)+JsonReader实现安卓课设《智能聊天机器人》填坑记录

目录一.准备工作二.开始填坑1.ChatMessageAdapter2.图灵机器人官方api接入3.网络安全设置4.超级天坑——从json中得到数据三.成果展示四.结语一.准备工作

根据导师留下的一个参考网址:Android智能聊天机器人的实现.我们可以自己参照做出一个大致的框架。可以把xml文件里的组件背景图片,显示文字改成自己喜欢的样子,然后我们开始着手内核。

二.开始填坑

一些小坑就不说了,自己也能调试出来,这里说些有点难受的大坑。

1.ChatMessageAdapter

在此文件第62行viewHolder.message=(TextView)convertView.findViewById(R.id.message)应该为viewHolder.message=(TextView)convertView.findViewById(R.id.left_message);

2.图灵机器人官方api接入

我们进入官网APIV2.0接入文档,可以清楚的看到

接口地址http://openapi.tuling123.com/openapi/api/v2请求方式HTTPPOST请求参数请求参数格式为json

相较于参考网址代码,推测应该是图灵机器人官网进行的某次重大更新,api连接有非常大的改变,参考网址的接口地址即MyRobot.URL_KEY要换成http://openapi.tuling123.com/openapi/api/v2,且其请求方式是httpget,所以我们必须用全新的,httppost请求方式的,参数是json的网络请求函数。一句话——HttpRequest.java文件要大改。在这里先稍微解释一下json,其实就是一个具有指定格式的字符串,只要你按照要求写对了,你发送到官网接口去,官网就会回你一个json,也是一个字符串,里面有我们需要的信息。更多内容可以参考官网APIV2.0接入文档,里面有样例和参数说明,可供理解。先上代码

privatestaticStringfromjson(Stringmessage){Stringmsg="";msg="{"+""perception":{"+""inputText":{"+""text":""+message+""}},"+""userInfo":{"+""apiKey":""+MyRobot.API_KEY+"","+""userId":""+MyRobot.ID+""}}";returnmsg;}

这样,聊天中你输入的信息作为函数参数,返回的是一个最简单的符合要求的json字符串。聪明的同学已经发现了,我们需要在MyRobot类中新增一个静态字符串成员ID。这个id就是你在图灵官网注册的用户id。这只是得到json,怎么与官网建立连接呢?别慌,上代码

publicstaticStringsendJsonPost(StringJson){//HttpClient6.0被抛弃了Stringresult="";BufferedReaderreader=null;try{StringurlPath=MyRobot.URL_KEY;URLurl=newURL(urlPath);HttpURLConnectionconn=(HttpURLConnection)url.openConnection();conn.setRequestMethod("POST");conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);conn.setRequestProperty("Connection","Keep-Alive");conn.setRequestProperty("Charset","UTF-8");//设置文件类型:conn.setRequestProperty("Content-Type","application/json;charset=UTF-8");//设置接收类型否则返回415错误conn.setRequestProperty("accept","application/json");//往服务器里面发送数据if(Json!=null&&!TextUtils.isEmpty(Json)){byte[]writebytes=Json.getBytes();//设置文件长度conn.setRequestProperty("Content-Length",String.valueOf(writebytes.length));OutputStreamoutwritestream=conn.getOutputStream();outwritestream.write(Json.getBytes());outwritestream.flush();outwritestream.close();Log.d("msg","doJsonPost:"+conn.getResponseCode());}if(conn.getResponseCode()==200){//上传成功reader=newBufferedReader(newInputStreamReader(conn.getInputStream()));result=reader.readLine();//得到返回的json字符串}}catch(Exceptione){Log.d("msg","没成功");//Log出现这个一般是fromjson函数没写好,格式不对e.printStackTrace();}finally{if(reader!=null){try{reader.close();}catch(IOExceptione){e.printStackTrace();}}}returnresult;}

以传输json为参数,返回得到的json字符串具体使用:

publicstaticChatMessagesendMessage(Stringmessage){ChatMessagechatMessage=newChatMessage();Log.d("msg",fromjson(message));StringgsonResult=sendJsonPost(fromjson(message));//连接请求的内容if(gsonResult!=null){try{chatMessage.setMessage(GetText(gsonResult));//http连接获取的内容解析之后的结果给聊天信息赋值}catch(Exceptione){chatMessage.setMessage("请求错误...");Log.d("msg",gsonResult);Log.e("msg",Log.getStackTraceString(e));}}chatMessage.setDate(newDate());chatMessage.setType(ChatMessage.Type.INCOUNT);returnchatMessage;}

这个时候你先别管GetText函数,你可以先尝试去Log.d(“msg”,gsonResult),即看看你到底有没有收到官网回复的json,如果你Log出来类似{“emotion”:{“robotEmotion”:{“a”:0,“d”:0,“emotionId”:0,“p”:0},“userEmotion”:{“a”:0,“d”:0,“emotionId”:20300,“p”:0}},“intent”:{“actionName”:“”,“code”:10004,“intentName”:“”},“results”:[{“groupType”:1,“resultType”:“text”,“values”:{“text”:“一颗蛋,哇哈哈~~”}}]}那么,恭喜你,你离成功已经不远了,最后的text的内容就是机器人的智能回复如果不行,那么你可以看看下面这个坑。

3.网络安全设置

安卓版本变高,在系统安全方面挖了不少坑,我们这里到图灵机器人官网的网络连接,可能被系统视为不安全的,导致连接失败。我们可以这样操作:在res文件夹中新建一个文件夹,放入network_security_config.xml

再在AndroidManifest文件中添加

android:networkSecurityConfig="@xml/network_security_config"

对了,别忘了添加网络权限

4.超级天坑——从json中得到数据

【一般的方法】自定义一个Result类,让这个类契合json文本(json中{表示类,[表示集合),再利用google的gson包的函数,将json数据转换成Result类对象,最后在对象中调用gettext函数得到数据。但由于这里的json是类中含有类,天知道我在这里查了多久资料,debug了多久代码,一直以为我是Result类没写对,一直在调试。直到最后,我得到了结论——此方法不可行。如果谁用这个方法成功了,务必联系我,类中类的result类来一个好吗?秋梨膏!【可行的方法】JsonReader一个通过输入流来得到json数据的数据流读入类,先上代码

privatestaticStringGetText(Stringjson)throwsIOException{JsonReaderreader=newJsonReader(newStringReader(json));Stringans="";reader.beginObject();try{while(reader.hasNext()){Stringname=reader.nextName();if(name.equals("emotion")){reader.beginObject();reader.nextName();reader.beginObject();for(inti=0;ireader.nextName();reader.nextString();}reader.endObject();reader.endObject();}elseif(name.equals("intent")){reader.beginObject();for(inti=0;ireader.beginArray();reader.beginObject();for(inti=0;ireader.beginObject();reader.nextName();ans=reader.nextString();reader.close();returnans;}}}}finally{returnans;}}

针对下面这个回复json来看

{"emotion":{"robotEmotion":{"a":0,"d":0,"emotionId":0,"p":0},"userEmotion":{"a":0,"d":0,"emotionId":20300,"p":0}},"intent":{"actionName":"","code":10004,"intentName":""},"results":[{"groupType":1,"resultType":"text","values":{"text":"一颗蛋,哇哈哈~~"}}]}

1.这个是当你发的信息可以判断情绪的时候就会有这样的回复json,如果你发的是形如“1234”,“nmsl”(浓墨山峦),等机器判断不出情绪的消息,回复json中可能就会没有emotion这个类(包含robotEmotion和userEmotion),只有intent类和result集合。我们的程序要做到两种情况都能得到有效数据才算成功,这里我用while循环+if…else来解决这个问题。2.简单介绍下上面函数reader能点出来的几个函数的意义beginobject(),在这里可以理解成读入”{“;beginArray(),在这里可以理解成读入”[“;nextname(),读入emotion,robotemotion等等字段nextString(),读入0,20300,text,一颗蛋,哇哈哈~~等字段后的字符串内容endArray(),在这里可以理解成读入”]“;endObject(),在这里可以理解成读入”}“;好,那么剩下的就不讲了,就是对应json字符串内容字段顺序,一个一个读入但不处理,直到"text":“一颗蛋,哇哈哈~~”,最后用ans=reader.nextString()来记录数据。有一说一,这个方法虽然看上去很笨重,但其实一个很底层的方法,所以是一个很通用的方法。对于这种类中有类的json数据,我发现是不是只有这种方法才能实现数据的获取?在这里先打一个问号吧,欢迎来评论区交流。

三.成果展示

四.结语

有一说一,这安卓课设确实有点坑,在下身先士卒,为大伙填坑,希望能对大伙有所帮助吧。

超微助手(微信机器人)下载

超微助手(微信机器人)是一款最新的微信营销软件,能够帮助用户群组自动添加好友,自动回复聊天,微信群发,程序多开自动收款等等,功能非常强大,能够帮助电商用户节约大量时间,更加轻松的卖货,有需要的用户欢迎下载体验!

软件功能

信群发工具

强大的群发设置

群爆粉 

自动添加群好友

群管理 

多群分别设置

自动回复 

自动回复匹配功能

自动收款 

工作收钱两不误

(卡密系统)

新好友管理 

自动添加群好友

客服系统

快捷消息回复

清理僵尸粉

无打扰检测僵尸粉

(区分拉黑、删除)

程序多开

支持程序多开、便捷操作

软件特色

一款强大的群发软件;可定时群发或间隔群发,图片,文件,视频,链接,群链接,

同时支持分组群分,可进行群爆粉,独家通讯录爆粉,有着自动同意添加好友请求,

能自动发送各种消息,并能自动拉群等强大功能

更新说明

微助手是一款微信辅助类产品,最高效率使用微信12月28日更新版本到:1.1.0,如果你是老用户,请重新下载。下载2.7.1.88和超微助手(只要把老版本config目录复制到新版本,以前的配置就可以继续使用,不用重新配置)1:增加群发防封设置选项2:增加通讯录防封设置选项3:通讯录增加加人进度4:群发增加尾巴

酷Q机器人绿色版官方免费下载

酷q机器人是一款可以帮助用户实现自动审核他人申请入群、自动踢人、自动管理群等群管理操作的QQ自动聊天机器人软件,这款qq群机器人基于Q+web协议开发设计,软件中包含了多个方便用户实现自动群聊、自动聊天等操作的插件,让用户不用坐在电脑面前也可轻松参与群聊天!

软件特色

1、精简代码,小巧灵活:精简大量不必要代码,减小酷Q体积,优化程序速度,使得酷Q更加轻巧好用;

2、多线处理,瞬间完成:程序全部采用多线程处理消息,每条消息不互干扰,瞬间完成处理及发送;

3、插件扩展,功能多样:包含强大的插件机制,可以安装各式各样的插件,扩展酷Q的各项功能;

4、掉新检测,崩溃防护:掉线重登检测,保持长期在线。代码严格审查,最大限度减少异常崩溃。

软件功能

1、自动的搜索以及复制电影链接;

2、全程免费完全绿色;

3、可以像多个QQ群发送消息!

使用注意

本插件永久免费使用,可以对接自己的电影网站。

因各个电影站系统及模版差异性太大,本机器人插件仅能支持大多数网站。

更新日志

修复因腾讯更新,无法读取好友列表的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇