zoukankan      html  css  js  c++  java
  • 智能机器人“小昆”的实现(二)获取服务器数据工具类的编写及测试

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

    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             //所以在这里特地将该特殊字符替换为转义字符
    
     70             str = str.replace("<br>", "
    ");
     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中就会发现打印出来的信息,说明测试通过。

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

  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/fuly550871915/p/4852568.html
Copyright © 2011-2022 走看看