非常感谢CSDN博客上的鸿洋哥,他贴出的源码是我所做的工作的基础,鸿洋哥博客链接http://blog.csdn.net/lmj623565791/article/details/38498353

下面入正题:

Android智能机器人的实现

效果图

一、概述

所谓实现了Android智能服务机器人,只是实现了一个可以调用图灵机器人API的工具,并为其加上聊天背景的壳子。

二、知识点补充(小白必看)

1.LayoutInflater:

它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等),具体作用:a、对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater.inflate()来载入;b、对于一个已经载入的界面,就可以使用Activiyt.findViewById()方法来获得其中的界面元素。

2.Adapter相关内容

相关内容参见 http://blog.chinaunix.net/uid-11898547-id-3303153.html

3.URLEncoder和URLDecoder

具体参见:http://www.java3z.com/cwbwebhome/article/article2/2414.html

4.HttpURLConnection

具体参见:http://www.blogjava.net/supercrsky/articles/247449.html

5.InputStream中的read()与read()

具体参见:http://www.cnblogs.com/pengyingh/articles/2507207.html

6.Button点击事件的三种方式

具体参见:http://www.2cto.com/kf/201501/369003.html

7.handler和thread的使用

具体参见:http://blog.csdn.net/lanpy88/article/details/6659630

在此贴个主要代码:
主Activity和访问API两个Java源码

主activity:

 package com.TANK.temperature;

 import java.util.ArrayList;
import java.util.Date;
import java.util.List; import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast; import com.TANK.temperature.Utils.HttpUtils;
import com.TANK.temperature.bean.ChatMessage;
import com.TANK.temperature.bean.ChatMessage.Type;
import com.TANK.temperature.Utils.HttpUtils; public class PikaqiuActivity extends Activity {
/**
* 展示消息的listview
* */
private ListView mChatView;
/** 文本域 */
private EditText mMsg; private List<ChatMessage> mDatas = new ArrayList<ChatMessage>(); private ChatMessageAdapter mAdapter; private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
ChatMessage from = (ChatMessage) msg.obj;
mDatas.add(from);
mAdapter.notifyDataSetChanged();
mChatView.setSelection(mDatas.size() - 1); } }; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.chat_main);
initView();
mAdapter = new ChatMessageAdapter(this, mDatas);
mChatView.setAdapter(mAdapter); } private void initView() {
// TODO Auto-generated method stub
mChatView = (ListView) findViewById(R.id.id_chat_listView);
mMsg = (EditText) findViewById(R.id.id_chat_msg);
mDatas.add(new ChatMessage(Type.INPUT, "皮卡皮卡"));
} public void sendMessage(View view) { final String msg = mMsg.getText().toString();
if (TextUtils.isEmpty(msg)) {
Toast.makeText(this, "还没有填写信息o...", Toast.LENGTH_SHORT).show();
return;
} ChatMessage to = new ChatMessage(Type.OUTPUT, msg);
to.setDate(new Date());
mDatas.add(to);
mAdapter.notifyDataSetChanged();
mChatView.setSelection(mDatas.size() - 1); mMsg.setText(""); /** 软键盘控制 */
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm.isActive()) {
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,
InputMethodManager.HIDE_NOT_ALWAYS); } new Thread() {
public void run() {
ChatMessage from = null;
try {
from = HttpUtils.sendMsg(msg); } catch (Exception e) {
// TODO: handle exception
from = new ChatMessage(Type.INPUT, "服务器已挂...");
}
Message message = Message.obtain();
message.obj = from;
mHandler.sendMessage(message); } }.start();
}
}

访问图灵机器人API

package com.TANK.temperature.Utils;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Date; import com.google.gson.Gson;
import com.TANK.temperature.bean.ChatMessage;
import com.TANK.temperature.bean.ChatMessage.Type;
import com.TANK.temperature.bean.CommonException;
import com.TANK.temperature.bean.Result; public class HttpUtils {
private static String API_KEY = "bb090f183940018147decf8f1858d3f9";
private static String URL = "http://www.tuling123.com/openapi/api"; /**
* 发送一个消息,并得到返回的消息
*
* @param msg
* @return
*/
public static ChatMessage sendMsg(String msg) {
ChatMessage message = new ChatMessage();
String url = setParams(msg);
String res = doGet(url);
Gson gson = new Gson();
Result result = gson.fromJson(res, Result.class); if (result.getCode() > 400000 || result.getText() == null
|| result.getText().trim().equals("")) {
message.setMsg("该功能等待开发...");
} else {
message.setMsg(result.getText());
}
message.setType(Type.INPUT);
message.setDate(new Date()); return message;
} /**
* 拼接Url
*
* @param msg
* @return
*/
private static String setParams(String msg) {
/** 利用Java中URLEncoder对其进行编码,如果不能实现,抛出异常 */
try {
msg = URLEncoder.encode(msg, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return URL + "?key=" + API_KEY + "&info=" + msg;
} /**
* Get请求,获得返回数据
*
* @param urlStr
* @return
*/
private static String doGet(String urlStr) {
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5 * 1000);
conn.setConnectTimeout(5 * 1000);
conn.setRequestMethod("GET");
conn.connect();
if (conn.getResponseCode() == 200) { //判断服务器是否成功处理了请求
is = conn.getInputStream();
baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[128]; while ((len = is.read(buf)) != -1) { //从输入流中读取一定数量的字节,如果流位于文件末尾而没有可用的字节将会返回-1;
baos.write(buf, 0, len);
}
baos.flush(); //刷新,将缓冲区内容全部输出
return baos.toString();
} else {
throw new CommonException("服务器连接错误!");
} } catch (Exception e) {
e.printStackTrace();
throw new CommonException("服务器连接错误!");
} finally {
try {
if (is != null)
is.close();
} catch (IOException e) {
e.printStackTrace();
} try {
if (baos != null)
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
conn.disconnect();
} } }

提供两个源码下载:鸿洋哥源码(机器人): http://yunpan.cn/cHTDFM8jpR3dX  访问密码 00f5

我的源码(机器人+百度全景地图):http://yunpan.cn/cHTDdsyG52wSK  访问密码 ce29

调用图灵机器人API实现Android智能机器人的更多相关文章

  1. Python 调用图灵机器人 API

    ''' Python3''' import requests #导入requests库 import json #导入json库 key = '3119f1e3610f42c5977ea73c4097 ...

  2. python 调用图灵机器人api实现简单的人机交互

    接入流程例如以下,须要先注冊开发人员帐号,之后会得到一个32位的key,保存下来,用于以后发送数据.http://www.tuling123.com/ 请求方式 演示样例: # -*- coding: ...

  3. 使用web api开发微信公众号,调用图灵机器人接口(二)

    此文将分两篇讲解,主要分为以下几步 签名校验; 首次提交验证申请; 接收消息; 被动响应消息(返回XML); 映射图灵消息及微信消息; 此篇为第二篇. 被动响应消息(返回XML) 上一篇中,我们已经可 ...

  4. 使用图灵机器人API实现聊天机器人

    使用图灵机器人的API需要先注册,获取key才行,这我就不说了,自己到http://www.tuling123.com/注册一个账号即可. 下面就是一个简单的python调用API实现聊天机器人的简易 ...

  5. 【chrome插件】web版微信接入图灵机器人API实现自动回复

    小贱鸡自动回复API已经不可以用了,现在改良接入图灵机器人API 360chrome浏览器团队翻译了部分谷歌插件开发文档 地址:http://open.chrome.360.cn/extension_ ...

  6. Delphi 实现 图灵机器人API(IDHTTP POST )

    此功能所需的 Key及接口文档,都可以在图灵机器人的官网下载, 小伙伴们需要申请自己的图灵机器人账号. 申请方法请自行百度“图灵机器人”  . 登录账号后,在左侧的[机器人接入],获取需要的信息,记得 ...

  7. 使用图灵机器人api搭建微信聊天机器人php实现

    之前通过hook技术实现了微信pc端发送消息功能,如果在结合图灵机器人就能实现微信聊天机器人. 代码下载:http://blog.yshizi.cn/131.html 逻辑如下: 下面我简单介绍一下步 ...

  8. 图灵机器人API调用 C++版

    这是一个非常简单的例子,作为新手的我是拿来练手的,当然也可以给和我一样的朋友一些参考. 而且图灵官网没有给出C的例子,网上一搜也是各种Java.C#甚至易语言实现,不要歧视C++好不好●︿●,就算不如 ...

  9. 使用web api开发微信公众号,调用图灵机器人接口(一)

    此文将分两篇讲解,主要分为以下几步 签名校验; 首次提交验证申请; 接收消息; 被动响应消息(返回XML); 映射图灵消息及微信消息; 其实图灵机器人搭载微信公众号很简单,只需要把图灵的地址配到公众后 ...

随机推荐

  1. Notes over compiling..

    When compiling VIM on windows, using nmake may be a better choice.. Because so far my attempts to co ...

  2. jquery从tr获取td

    已知HTML:<tr id="row001"><td>001</td><td>张三</td></tr>JQU ...

  3. SonarQube代码质量管理平台比较好的搭建和使用资料

    http://www.voidcn.com/blog/lidujun1028/article/p-3831235.html   Sonar (SonarQube)是一个开源平台,用于管理源代码的质量. ...

  4. Linux学习 -- Shell基础 -- 概述

    Shell是什么? 命令解释器 编程语言 Linux支持的Shell类型 cat /etc/shells 主要学习 bash 脚本执行方式 echo echo -e 单引号 -- 原始字符串  双引号 ...

  5. hdu_2546_饭卡(01背包)

    题目连接:hdu_2546_饭卡 题意:中文,不解释 题解:先拿5元来买最贵的,最后就是一个01背包,这里也算用到贪心的思想 #include<bits/stdc++.h> #define ...

  6. 剑指offer 栈的压入弹出 顺序

    判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍 ...

  7. 用telnet命令,POP3接收邮件

    昨天已经成功利用telnet命令发送了邮件,今天接着来,只能发送不能接收多郁闷. 邮件的接收这里是基于pop3协议的,pop3协议共定义了12条与接收相关的邮件,如下面简单解释: 首先是与登陆验证相关 ...

  8. 《LED调光-DMX512灯光协义接收控制》转

    源:http://blog.163.com/zhaojun_xf/blog/static/30050580200951023046891 来自: 作者:龙图开发网 文章来源:龙图开发网 时间:2009 ...

  9. IPoint Interface接口

    Description A Point is a zero-dimensional object that represents a specific (X, Y) location in a the ...

  10. createSQLQuery的addEntity跟setResultTransformer方法

    createSQLQuery的addEntity和setResultTransformer方法 1. 使用SQLQuery对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Sessi ...