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

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

  • 相关阅读:
    UVA 12697 Minimal Subarray Length
    学渣乱搞系列之后缀数组
    HDU 3518 Boring counting
    NYOJ 832 合并游戏
    如何在SAP里创建configurable material物料主数据
    在Kubernetes上运行SAP UI5应用(下): 一个例子体会Kubernetes内容器的高可用性和弹性伸缩
    使用SAP C4C rule editor动态控制UI上某个按钮是否显示
    ABAP SICF服务和Java Servlet的比较
    一些SAP Partners能够通过二次开发实现打通C/4HANA和S/4HANA的方法介绍
    Java实现的有道云笔记图片批量下载工具
  • 原文地址:https://www.cnblogs.com/fuly550871915/p/4852568.html
Copyright © 2011-2022 走看看