基于Android的智能聊天机器人的设计与实现Word下载.docx

上传人:b****5 文档编号:17901563 上传时间:2022-12-12 格式:DOCX 页数:25 大小:1.59MB
下载 相关 举报
基于Android的智能聊天机器人的设计与实现Word下载.docx_第1页
第1页 / 共25页
基于Android的智能聊天机器人的设计与实现Word下载.docx_第2页
第2页 / 共25页
基于Android的智能聊天机器人的设计与实现Word下载.docx_第3页
第3页 / 共25页
基于Android的智能聊天机器人的设计与实现Word下载.docx_第4页
第4页 / 共25页
基于Android的智能聊天机器人的设计与实现Word下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

基于Android的智能聊天机器人的设计与实现Word下载.docx

《基于Android的智能聊天机器人的设计与实现Word下载.docx》由会员分享,可在线阅读,更多相关《基于Android的智能聊天机器人的设计与实现Word下载.docx(25页珍藏版)》请在冰豆网上搜索。

基于Android的智能聊天机器人的设计与实现Word下载.docx

+INFO;

HttpGetrequest=newHttpGet(requesturl);

HttpResponseresponse=HttpClients.createDefault().execute(request);

//200即正确的返回码

if(response.getStatusLine().getStatusCode()==200){

Stringresult=EntityUtils.toString(response.getEntity());

System.out.println("

返回结果:

"

+result);

}

好了,接下来开始实战吧,这个应用我打算写成两篇文章

第一篇讲下关于如何调用接口,从网上获取数据,包括解析Json字符串

第二篇会把这些获取的数据嵌入到安卓应用

首先,先写一个工具类,这个工具类是用来获取用户输入的信息并返回服务器提供的数据的

这里面用到了一个第三方提供的JAR包,Gson它是谷歌提供给我们用来使Json数据序列化和反序列化的

关于Gson的使用我之前写过一篇笔记,不熟悉的朋友可以看看:

Gson简要使用笔记(

代码如下:

具体看注释

packagecom.example.utils;

importjava.io.ByteArrayOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.UnsupportedEncodingException;

import.HttpURLConnection;

import.MalformedURLException;

import.URLEncoder;

importjava.util.Date;

importandroid.util.Log;

importcom.example.pojo.Message;

importcom.example.pojo.Message.Type;

importcom.example.pojo.Result;

importcom.google.gson.Gson;

/**

*

*获取信息帮助类传入用户输入的字符,给出相对应的信息

*/

publicclassGetDataUtils{

privatestaticfinalStringAPI_KEY="

这里填写官方提供的KEY"

;

//申请的API_KEY值

privatestaticfinalStringURL="

接口请求地址

publicStringgetChat(Stringmsg){//这个方法是获取服务端返回回来的Json数据,msg为用户输入的信息

Stringresult="

//存放服务器返回信息的变量

InputStreaminputStream=null;

ByteArrayOutputStreamoutputStream=null;

try{

//进行资源请求

.URLurl=new.URL(getMsgUrl(msg));

HttpURLConnectionhttpURLConnection=(HttpURLConnection)url

.openConnection();

//打开资源连接

//HttpURLConnection参数设定

httpURLConnection.setReadTimeout(5*1000);

httpURLConnection.setConnectTimeout(5*1000);

httpURLConnection.setRequestMethod("

GET"

inputStream=httpURLConnection.getInputStream();

//获取一个输入流接收服务端返回的信息

intlen=-1;

byte[]bs=newbyte[124];

//用来接收输入流的字节数组

outputStream=newByteArrayOutputStream();

//用一个输出流来输出刚获取的输入流所得到的信息

while((len=inputStream.read(bs))!

=-1){//从输入流中读取一定数量的字节,并将其存储在缓冲区数组

//bs中

outputStream.write(bs,0,len);

//往输入流写入

}

outputStream.flush();

//清除缓冲区

result=newString(outputStream.toByteArray());

//转换成字符串

}catch(MalformedURLExceptione){

e.printStackTrace();

}catch(IOExceptione){

}finally{

//关闭相关资源

if(inputStream!

=null){

inputStream.close();

if(outputStream!

outputStream.close();

Log.i("

tuzi"

result:

+result);

//打印测试日志

returnresult;

privateStringgetMsgUrl(Stringmsg)throwsUnsupportedEncodingException{

Stringpath="

Stringinfo=URLEncoder.encode(msg,"

UTF-8"

//转换url编码

path=URL+"

?

key="

+API_KEY+"

&

+msg;

returnpath;

publicMessagegetInfo(Stringmsg){

Messagemessage=newMessage();

Gsongson=newGson();

Resultresult=gson.fromJson(getChat(msg),Result.class);

//获取到服务器返回的json并转换为Result对象,Result对象可能不存在,会出现异常

message.setMsg(result.getText());

//message可能为空,需要捕获异常

}catch(Exceptione){

//可能服务器没有返回正常数据,也就存在着空白内容,需要捕获异常

message.setMsg("

服务器繁忙,请稍后再试"

message.setTime(newDate());

message.setType(Type.INCOME);

returnmessage;

}

下面这2个是实体类,根据官网提供的示例,返回的Json字符串里包含:

code状态码,text文本内容

packagecom.example.pojo;

*用来映射返回Json字符串

*

publicclassResult{

privateStringcode;

privateStringtext;

publicStringgetCode(){

returncode;

publicvoidsetCode(Stringcode){

this.code=code;

publicStringgetText(){

returntext;

publicvoidsetText(Stringtext){

this.text=text;

publicclassMessage{

privateStringname;

privateStringmsg;

privateDatetime;

privateTypetype;

publicenumType{//类型枚举,发送,接收

INCOME,OUTCOME

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

this.name=name;

publicStringgetMsg(){

returnmsg;

publicvoidsetMsg(Stringmsg){

this.msg=msg;

publicDategetTime(){

returntime;

publicvoidsetTime(Datetime){

this.time=time;

publicTypegetType(){

returntype;

publicvoidsetType(Typetype){

this.type=type;

编写个测试类

packagecom.example.test;

importandroid.test.AndroidTestCase;

importcom.example.utils.GetDataUtils;

publicclassGetDataUtilsTestextendsAndroidTestCase{

publicvoidtest(){

GetDataUtilsdataUtils=newGetDataUtils();

Messagemessage=dataUtils.getInfo("

你好"

Messagemessage1=dataUtils.getInfo("

你是谁"

Messagemessage2=dataUtils.getInfo("

你知道JAVA是什么吗"

Messagemessage3=dataUtils.getInfo("

下雨了,天好冷"

兔子"

message.getMsg());

message1.getMsg());

message2.getMsg());

message3.getMsg());

在JAVAWEB里编写测试单元用到的是Junit,需要导入jar包,在安卓开发里也有类似这样的步骤

首先我们要在AndroidManifest.xml里的application标签里添加

<

uses-libraryandroid:

name="

android.test.runner"

/>

然后在application外添加  

<

instrumentationandroid:

android.test.InstrumentationTestRunner"

android:

label="

ceshi"

targetPackage="

com.example.androidchat"

>

/instrumentation>

由于需要联网别忘了给应用赋予网络权限

uses-permissionandroid:

android.permission.INTERNET"

这里是完整文件代码:

xmlversion="

1.0"

encoding="

>

manifestxmlns:

android="

package="

versionCode="

1"

versionName="

uses-sdk

minSdkVersion="

8"

targetSdkVersion="

21"

application

allowBackup="

true"

icon="

@drawable/ic_launcher"

@string/app_name"

theme="

@style/AppTheme"

activity

.MainActivity"

intent-filter>

actionandroid:

android.intent.action.MAIN"

categoryandroid:

android.intent.category.LAUNCHER"

/intent-filter>

/activity>

/application>

instrumentation

/manifest>

看下我们的测试代码效果图:

好了,此时我们已经可以获取到服务端的数据,并且接收到客户端并做处理

在上一篇文章中,已经实现了对网络数据的获取和处理封装,这篇文章来讲下如何嵌入到安卓应用中。

先看下效果图:

从上面两张图我们可以发现,这个聊天布局其实就是一个ListView,只不过它和传统的ListView有些区别,因为它使用了多Item样式布局

首先,先来分析下基础布局:

这个界面是由3个布局文件组成,分别是主布局,发送消息样式布局,接收消息样式布局

先来看下主布局:

这里是对应的主布局代码:

android:

divider="

@null"

  --去除ListView的Item分割线

RelativeLayoutxmlns:

xmlns:

tools="

layout_width="

match_parent"

layout_height="

background="

@drawable/chat_bg_default"

LinearLayout

id="

@+id/title"

fill_parent"

wrap_content"

layout_alignParentTop="

@drawable/title_bar"

gravity="

center"

orientation="

vertical"

TextView

layout_gravity="

text="

机器兔"

textColor="

@android:

color/white"

textSize="

20sp"

/LinearLayout>

RelativeLayout

@+id/bottom"

55dp"

layout_alignParentBottom="

@drawable/bottom_bar"

padding="

5dp"

EditText

@+id/send_message"

layout_alignParentLeft="

layout_centerVertical="

layout_marginLeft="

layout_marginRight="

@drawable/login_edit_normal"

Button

@+id/send_bt"

layout_alignParentRight="

layout_alignRight="

@id/send_message"

@drawable/send_button_selector"

center_vertical"

发送"

/RelativeLayout>

ListView

@+id/chatlistview"

layout_above="

@id/bottom"

layout_below="

@id/title"

/ListView>

再来看下消息布局:

(由于消息布局只是左右两边方向的不同,这里只给出其中一个)

这是2个消息布局的代码:

LinearLayoutxmlns:

@+id/sendtime"

#9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1