Android课程文档聊天机器人解析_第1页
Android课程文档聊天机器人解析_第2页
Android课程文档聊天机器人解析_第3页
Android课程文档聊天机器人解析_第4页
Android课程文档聊天机器人解析_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Android 程序设计程序设计课程课程 答答 辩辩 项项 目目 文文 档档 题 目 聊天机器人 学 院 计算机学院 专 业 学生姓名 学 号 摘要 聊天机器人是一种特殊的自动问答系统,它的特点是模仿 人的语言习惯,几乎都是通过模式匹配的方式来寻找问题最合 适的答案。聊天机器人对于知道答案的问题,往往回答的比较 准确,而对于不知道的问题,则通过猜测,转移话题,或回答不 知道的方式给出答案。 聊天机器人就像一面镜子, 跟好人, 学好人. 有时也会反射你的问题。所以它们是社会的镜子, 人性的镜子.。因此可以用于心理治疗和社会调查领域。 随着世界科技的飞速发展,智能设备的不断完善,功能 也越来越多。

2、聊天机器人不仅能够在你寂寞的时候陪你聊聊 天,开开玩笑,讲讲故事,还能自动为你查询你想知道的问 题。如:想知道的新闻,百度百科,食谱,航班以及天气预 报等等。 本课题研究设计一款运行在 Android 平台的聊天机器人 软件。该课题主要使用 Java 语言开发。运行于 Android 操作 系统,实现了聊天的基本功能。 目目 录录 摘要.2 目 录.3 第一章 引言.4 1.1 项目背景.3 1.2 项目目的.3 1.3 项目内容.5 第二章 ANDROID 相关技术介绍.5 2.1 ANDROID 介绍.5 2.2 ECLIPSE 开发平台介绍.6 第三章 聊天机器人设计 .7 3.1 特点

3、分析.7 3.2 程序运行流程.8 第四章 聊天机器人的实现 .9 4.1 安装开发环境.9 4.2 项目文档浏览.10 4.3 消息的接受与发送.11 4.4 消息实体的编写.13 4.5 LISTVIEW 的编写.16 4.6 MAINACTIVITY 的编写.17 4.7 CHATMESSAGEADPATER 的编写.19 4.8 效果展示 .20 结 论.21 第一章第一章 引言引言 1.1 项目背景项目背景 2007 年 11 月 5 日,距离苹果发布第一代 iPhone 手机仅四个月,谷歌公司正式公 布 Android 操作系统,并且宣布与 34 家手机厂商、运营商成立“开放手机联

4、盟” (OHA),自此基于 Linux 内核的 Android 系统正式登上历史舞台。Android 平台自 2010 年以来呈现出突飞猛进的发展势头,在全球智能手机市场中所占份额从不到 10% 一路猛增至 50%以上。2011 年,全球智能手机销量首次超过 PC 电脑的销量。Android 已经成为全球智能手机市场的领跑者,截至 2012 年第一季度的市场份额已超过 50%。 在这样的情况下,基于 Android 平台的应用也迅速增长。2012 年 2 月数据显示, Android Market 上的应用程序数量突破 45 万个,Android Market 的累计下载量已经突 破 130

5、亿次,在谷歌电子市场登记的 Android 开发者已达 10W 名,Android 设备每天 激活量达到 85 万台。 很显然,在这样的市场环境下,Android 开发成为一大产业,而大多数手机随着手 机内存的加大,cup 的提升,让手机可以运行越来越的软件,手机的功能也越来越多。 聊天机器人拥有着主要 2 个功能,一是帮助用户查找问题答案,二是和用户进行聊天。 为了方便用户查找自己所需要的问题,聊天机器人的开发是有意义的,成为主流趋势 只是时间问题,除了帮助用户快速查询问题的答案以外。聊天机器人另外一个突出特 点就是在你没有人可以说话的时候,能有一位能一直回复你的忠实听众。中国移动客 户发送

6、简易聊天消息到 10086 后,10086 也会自动回复客户与之聊天所匹配的消息,这 个人性化的设置在当时推出后,就立刻引起了人们特别的喜爱,中国移动的成功,也 标志了聊天机器人被人们需求,被人们所喜爱。为了使更多使用 Android 手机的人能 够使用到聊天机器人。聊天机器人的研发势在必行。 本论文即基于此背景而开展的。 1.2 项目目的项目目的 随着智能手机的普及,越来越多的普通民众习惯于在手机上完成他们想要做的事 情,获取他们想了解的信息。而信息的查找通常都通过第三方软件完成,如天气预报 的查询则需要点开天气预报这个 APP 或者打开浏览器到网页上查询。这对用户来说, 如果要查询多种信息

7、就显得很不方便,而聊天机器人的出现就立刻解决了这一难题。 通过此课题的研究,熟悉了第三方 API 图灵机器人的使用、以及 ListView 多种 Item 布局时的处理,实现聊天对话的界面等功能。 1.3 项目内容项目内容 本项目主要分为 4 个步骤 1、编写一个工具类实现消息发送与接收 2、完成消息实体的编写 3、完成 ListView 布局 4、完成 activity 功能的实现 第二章第二章 AndroidAndroid相关技术介绍相关技术介绍 2.1 Android 介绍介绍 Android 是“机器人”的意思,是 Google 公司于 2007 年 11 月 5 日发布的一个机遇 L

8、inux 平台的开源手机操作系统。该系统由底向上一共分为了 4 层,如图 2-1。每一层 对把底层实现封装,并提供调用接口给上一层。 图 2-1 Android 系统架构 (1) Linux 内核(Linux Kernel)。Android 运行在 Linux Kernel2.6 之上,但是把 Linux 内核 GNU 协议约束的部分做了取代。这样,运行在 Android 上的程序可以用于 商业目的。Linux 内核是硬件和软件层之间的抽象层。 (2) 中间件。中间件包括两部分:核心库和运行时环境(Libraries import java.io.ByteArrayOutputStream;

9、import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import .HttpURLConnection; import .MalformedURLException; import .URLEncoder; import java.util.Date; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.example.mysnow

10、.bean.ChatMessage; import com.example.mysnow.bean.ChatMessage.Type; import com.example.mysnow.bean.Result; public class HttpUtils private static final String URL = private static final String API_KEY = d377b990d919b0947a909b5; /* * 发送一个消息,得到返回的消息 * param msg * return */ public static ChatMessage sen

11、dMessage(String msg) ChatMessage chatMessage = new ChatMessage(); String jsonRes = doGet(msg); Gson gson = new Gson(); Result result = null; try result = gson.fromJson(jsonRes, Result.class); chatMessage.setMsg(result.getText(); catch (Exception e) chatMessage.setMsg(服务器繁忙,请稍候再试); chatMessage.setDat

12、e(new Date(); chatMessage.setType(Type.INCOMING); return chatMessage; public static String doGet(String msg) String result = ; String url = setParams(msg); ByteArrayOutputStream baos = null; InputStream is = null; try .URL urlNet = new .URL(url); HttpURLConnection conn = (HttpURLConnection) urlNet .

13、openConnection(); conn.setReadTimeout(5 * 1000); conn.setConnectTimeout(5 * 1000); conn.setRequestMethod(GET); is = conn.getInputStream(); int len = -1; byte buf = new byte128; baos = new ByteArrayOutputStream(); while (len = is.read(buf) != -1) baos.write(buf, 0, len); baos.flush(); result = new St

14、ring(baos.toByteArray(); catch (MalformedURLException e) e.printStackTrace(); catch (Exception e) e.printStackTrace(); finally try if (baos != null) baos.close(); catch (IOException e) e.printStackTrace(); try if (is != null) is.close(); catch (IOException e) e.printStackTrace(); return result; priv

15、ate static String setParams(String msg) String url = ; try url = URL + ?key= + API_KEY + catch (UnsupportedEncodingException e) e.printStackTrace(); return url; 4.4 消息实体的编写消息实体的编写 界面显示所需类: package com.example.mysnow.bean; import java.util.Date; public class ChatMessage private String name; private S

16、tring msg; private Type type; private Date date; public enum Type INCOMING, OUTCOMING public ChatMessage() public ChatMessage(String msg, Type type, Date date) super(); this.msg = msg; this.type = type; this.date = date; public String getName() return name; public void setName(String name)

17、 = name; public String getMsg() return msg; public void setMsg(String msg) this.msg = msg; public Type getType() return type; public void setType(Type type) this.type = type; public Date getDate() return date; public void setDate(Date date) this.date = date; 服务端返回数据所需类: package com.example.mysnow.be

18、an; public class Result private int code; private String text; public int getCode() return code; public void setCode(int code) this.code = code; public String getText() return text; public void setText(String text) this.text = text; 4.5 ListView 布局布局 4.6MainActivity 的编写的编写 private Handler mHandler =

19、 new Handler() public void handleMessage(android.os.Message msg) / 等待接收,子线程完成数据的返回 ChatMessage fromMessge = (ChatMessage) msg.obj; mDatas.add(fromMessge); mAdapter.notifyDataSetChanged(); mMsgs.setSelection(mDatas.size()-1); Override protected void onCreate(Bundle savedInstanceState) super.onCreate(

20、savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initView(); initDatas(); / 初始化事件 initListener(); private void initListener() mSendMsg.setOnClickListener(new OnClickListener() Override public void onClick(View v) final String toMsg = mInputM

21、sg.getText().toString(); if (TextUtils.isEmpty(toMsg) Toast.makeText(MainActivity.this, 发送消息不能为空!, Toast.LENGTH_SHORT).show(); return; ChatMessage toMessage = new ChatMessage(); toMessage.setDate(new Date(); toMessage.setMsg(toMsg); toMessage.setType(Type.OUTCOMING); mDatas.add(toMessage); mAdapter.

22、notifyDataSetChanged(); mMsgs.setSelection(mDatas.size()-1); mInputMsg.setText(); new Thread() public void run() ChatMessage fromMessage = HttpUtils.sendMessage(toMsg); Message m = Message.obtain(); m.obj = fromMessage; mHandler.sendMessage(m); .start(); ); private void initDatas() mDatas = new Arra

23、yList(); mDatas.add(new ChatMessage(你好,小雪为您服务, Type.INCOMING, new Date(); mAdapter = new ChatMessageAdapter(this, mDatas); mMsgs.setAdapter(mAdapter); 4.7ChatMessageAdapter 的编写的编写 public View getView(int position, View convertView, ViewGroup parent) ChatMessage chatMessage = mDatas.get(position); Vi

24、ewHolder viewHolder = null; if (convertView = null) / 通过ItemType设置不同的布局 if (getItemViewType(position) = 0) convertView = mInflater.inflate(R.layout.item_from_msg, parent, false); viewHolder = new ViewHolder(); viewHolder.mDate = (TextView) convertView .findViewById(R.id.id_form_msg_date); viewHolder.mMsg = (TextView) convertView .findViewById(R.id.id_from_msg_info); else convertView = mInflater.inflate(R.layout.item_to_msg, parent, false); viewHolder = new ViewHolder(); viewHolder.mDa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论