没有取得图灵机器人认证的朋友可以看上一篇,点击下面的地址即可:
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中就会发现打印出来的信息,说明测试通过。
好了,至此,我们可以确定我们实现的这个工具类正确。就可以进行下一步的代码编写了。