智能机器人“小昆”的实现(二)获取服务器数据工具类的编写及测试

没有取得图灵机器人认证的朋友可以看上一篇,点击下面的地址即可:

http://www.cnblogs.com/fuly550871915/p/4852148.html

已经取得认证的朋友,可以继续往下做了。下面就开始我们的实际代码编写。在这篇文章中,我们要实现通过调用图灵机器人API获取返回的数据的功能。而且搭建相应的测试环境,看看我们这个功能实现的到底正确不正确。

一、获得服务器返回数据的工具类的实现

主要是android中的简单的网络编程知识的运用。代码如下:

  1 package com.fuly.kun.util;
  2
  3 import java.io.BufferedReader;
  4 import java.io.ByteArrayOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.InputStreamReader;
  8 import java.io.UnsupportedEncodingException;
  9 import java.net.HttpURLConnection;
 10 import java.net.MalformedURLException;
 11 import java.net.ProtocolException;
 12 import java.net.URL;
 13 import java.net.URLEncoder;
 14 import java.util.Date;
 15
 16 import android.util.Log;
 17
 18 import com.fuly.kun.bean.ChatMsg;
 19 import com.fuly.kun.bean.ChatMsg.Type;
 20 import com.fuly.kun.bean.ResultMsg;
 21 import com.google.gson.Gson;
 22 import com.google.gson.JsonSyntaxException;
 23
 24
 25 //该类用来向服务器发送消息以及处理从服务器返回的数据
 26 public class HttpUtil {
 27
 28
 29
 30
 31
 32     //该方法用来处理从服务器返回的数据
 33     public static String doGet(String msg){
 34
 35         //获取相应的网址
 36         URL msgUrl = setMsgParam(msg);
 37
 38
 39
 40         HttpURLConnection connection = null;
 41         try {
 42                 //然后开始和服务器建立连接
 43                 connection = (HttpURLConnection) msgUrl.openConnection();
 44
 45                 connection.setRequestMethod("GET");
 46                 connection.setConnectTimeout(5000);
 47                 connection.setReadTimeout(5000);
 48             } catch (ProtocolException e) {
 49
 50                 e.printStackTrace();
 51             } catch (IOException e) {
 52
 53                 e.printStackTrace();
 54             }
 55         InputStream in = null;
 56         try {
 57             //下面对获得输入流进行读取
 58
 59              in = connection.getInputStream();
 60             BufferedReader reader = new BufferedReader(new InputStreamReader(in));
 61             StringBuilder response = new StringBuilder();
 62             String line ;
 63             while((line = reader.readLine())!= null){
 64                 response.append(line);
 65             }
 66
 67             String str = response.toString();
 68             //因为发现从服务器端返回的json数据中,经常带有特殊字符<br>
 69             //所以在这里特地将该特殊字符替换为转义字符\n
 70             str = str.replace("<br>", "\n");
 71             return str;
 72
 73         } catch (IOException e) {
 74
 75             e.printStackTrace();
 76         }finally{
 77             if(connection != null){
 78                 connection.disconnect();
 79             }
 80             if(in != null){
 81                 try {
 82                     in.close();
 83                 } catch (IOException e) {
 84                     e.printStackTrace();
 85                 }
 86             }
 87         }
 88
 89         return null;
 90
 91     }
 92
 93     //该方法用来返回相应的网址
 94     private static URL setMsgParam(String msg) {
 95
 96         //注意此处应写你自己的api key
 97           String APIKEY = "761b4f79ebdf8b26d0bf7e0c816b32b4";
 98
 99           try {
100               //将编码格式设置为utf-8,千万别忘记这一步
101             String mMsg = URLEncoder.encode(msg, "utf-8");
102             String getURL = "http://www.tuling123.com/openapi/api?key=" + APIKEY + "&info=" + mMsg;
103             URL getUrl = new URL(getURL);
104
105             return getUrl;
106         } catch (UnsupportedEncodingException e) {
107             e.printStackTrace();
108         } catch (MalformedURLException e) {
109             e.printStackTrace();
110         }
111
112           return null;
113
114     }
115
116 }

注意,一定要填写正确自己的api key

二、编写对HttpUtil进行测试的类。

在这里,我们首先需要对上面的工具类HttpUtil进行测试,保证这个工具类是正确的,才能往下进行。否则如果下面出了错误,你也不知道是因为工具类错误还是其他代码错误,不好判别。

android中,编写测试类,首先要搭建测试环境。

在AndroidManifest.xml文件添加如下代码:

1  <instrumentation
2         android:name = "android.test.InstrumentationTestRunner"
3         android:targetPackage="com.fuly.kun"></instrumentation>

上面的代码说明我们要进行测试的包是com.fuly.kun(这里应该改为读者自己建立的包名)。

然后再在AndroidManifest.xml中添加以下语句:

<uses-library android:name="android.test.runner"/>

这一句一定要放在application标签里面。

好了,这样子测试环境我们就搭建好了。

然后新建包com.fuly.kun.test,在该包下面新建测试类HttpUtilTest,继承自AndroidTestCase。代码如下:

 1 package com.fuly.kun.test;
 2
 3 import com.fuly.kun.util.HttpUtil;
 4
 5 import android.test.AndroidTestCase;
 6 import android.util.Log;
 7
 8 //测试类HttpUtil
 9 public class HttpUtilTest extends AndroidTestCase{
10
11
12     public void testSendInfo(){
13
14         Log.e("付勇焜1--->",HttpUtil.doGet("你好"));
15         Log.e("付勇焜2--->",HttpUtil.doGet("给我讲个笑话"));
16     }
17
18 }

可以看到,在这里,我们向服务器发送了两条消息(也就是向机器人发送消息),分别为”你好“,”给我讲个笑话“。然后把服务器返回的数据打印出来。如果能正确打印,则说明通过测试。

下面我们右击项目名称,run as,选择 Android JUnit Test(android单元测试)即可。然后在LogCat中就会发现打印出来的信息,说明测试通过。

好了,至此,我们可以确定我们实现的这个工具类正确。就可以进行下一步的代码编写了。

时间: 2024-08-10 14:55:11

智能机器人“小昆”的实现(二)获取服务器数据工具类的编写及测试的相关文章

智能机器人“小昆”的实现(一)项目介绍以及图灵授权认证

一.项目介绍 这个小项目开发了一个叫做“小昆”的图灵智能机器人,它可以陪你聊天,听你抱怨.而且可以在后台设置机器人知识库,打造你的专属智能机器人.我们先看几张运行的效果图,介绍一下项目吧.如下图: 功能说明:其实很简单,只要你在编辑框中输入你想要对机器人小昆说的话,然后点击发送按钮(即那个蝴蝶),就可以愉快的跟小昆聊天了. 原理说明:本项目智能机器人小昆的实现主要是调用了第三方的API,即图灵机器人的接口.而其他的模块则是android原生的代码编写.并不算是复杂. 通过本项目你可以学习到: (

nodejs获取服务器数据到页面

const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); const router = new Router(); const views = require('koa-views'); const json = require('koa-json'); const onerror = require('koa-onerror'); const bodyparser = req

安卓开发技巧二:自定义日志工具类XLog的实现

我们在开发过程中,打印日志是必不可少的一个调试环节,然而,直接使用系统自带的Log日志类,并不能满足我们实际项目的需求:假如我们现在在开发一款比较大的项目,用到打印日志的地方肯定特别多,等到真正上线的时候,我们是不希望日志依旧能够打印出的,原因很简单,不仅多少有些影响效率,更有可能导致信息的泄露,所以我们就需要把所有的日志打印语句全部取消掉,难道我们真的一个一个的去删除这些打印日志的语句吗?项目那么大,就是想删除,也得耗费大量的时间和精力!大家不用怕,笔者这就给大家带来一款控制线上版本和线下版本

二维码生成工具类java版

注意:这里我不提供所需jar包的路径,我会把所有引用的jar包显示出来,大家自行Google package com.net.util; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.Shape; import java.awt.geom.RoundRectangle2D; import java.a

httputil用http获取请求的工具类

原文:httputil用http获取请求的工具类 源代码下载地址:http://www.zuidaima.com/share/1550463738612736.htm package com.zuidaima.xiaocan.demo.util; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.

二维码生成工具类

1 package com.ideal.common.util; 2 3 import java.awt.image.BufferedImage; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.util.UUID; 9 10 import net.glx

android 获取手机信息工具类

package com.yqy.yqy_listviewheadview; import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log; /** * 获取手机信息工具类<br> * 内部已经封装了打印功能,仅仅须要把DEBUG參数改为true就可以<br> * 假设须要更换tag能够直接更改,默觉得KEZHUANG * * @author YQY

智能机器人“小昆”的实现(四)布局实现

经过漫长的代码编写,我们终于可以进行布局的编写了.我们再来看一下效果图,如下: 首先可以看到,主布局很简单,上面是一个ListView,底部并排放着一个编辑框和一个发送按钮.然后就是ListView的子项布局,我们发现有两种.一种是发送消息的布局,整体靠右,左边是一个消息框,右边是一个头像,头像下面有昵称.还有一种是服务器返回的消息的布局,整体 靠左,往右依次为头像和消息框,且头像下也有昵称.好了,分析完毕,下面我们就开始编写这个布局吧. 一.素材 这个项目中所用的图片素材,请点击下面的链接,下

智能机器人“小昆”的实现(三)实体类的实现

在上一篇文章中,我们实现了获取服务器返回数据的工具类.没有读过的朋友可以点击下面链接: http://www.cnblogs.com/fuly550871915/p/4852568.html 这一篇文章要在上一篇的基础上,实现两个重要的实体类,一个是ChatMsg,用来封装数据从而实现标准的消息格式:一个是ResultMsg,用来封装从服务器端返回的数据. 一.准备工作 在这里,解析json字符串,我们打算使用第三方包GSON.首先点击下面的地址,下载该包. http://code.google