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

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中就会发现打印出来的信息,说明测试通过。

 

 

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

 

posted on 2015-10-02 19:07  fuly  阅读(550)  评论(0编辑  收藏  举报