当前位置: 代码迷 >> Android >> 慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【二】
  详细解决方案

慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【二】

热度:33   发布时间:2016-04-28 02:42:36.0
慕课网《Android智能机器人“小慕”的实现》项目上手操作与代码解读【2】

  前几天有点忙,一直没写第三方API是怎么调用的,今天我先介绍一下如何调用图灵机器人第三方API。

一、图灵机器人API的调用

  首先登录图灵机器人官网首页http://www.tuling123.com/openapi/,注册一个账号,注册完以后登录,登录后就出现如下界面

  其中比较重要的是API KEY,这是与申请账号是一一对应的,每一个账号有且只有一个API KEY,这在后面的调用中会用到。左边一栏有功能选择、知识库、机器人调教和机器人设定等,这些完全可以根据个人喜好来设定,比较好玩的是你可以在此设定特定问题的回答,尤其是当整个项目做好之后,你可以把APK发给妹纸,然后让她问一下特定的问题,然后得到你设计好的回答,哈哈,是不是逼格很高啊,哈哈!

  好了,废话不多说,我们下面进入正题,看看究竟是如何调用的。其实调用的方法官网里面有介绍,首先点击右上角“平台接入”,可以看到请求方式

  由上图可见,请求方式是用的http get方法,其实就是到图灵机器人的服务器上用get方法拉数据,服务器响应后反馈给用户结果,也就是你的问题的回复,回复是json格式的,如果大家不知道json格式是啥样的,可以上网查一查。

  

  上图就是给出的返回参数和返回码的示例,我只是截取了一部分。从上面也可以大致了解到Json格式的大致样貌,个人感觉跟结构体有点像。。。返回码可以判断接口返回的数据是否正确。

  官网还给出了最最重要的调用示例,因为我们是开发Android程序,所以我们选择java调用方式

 

  其实很简单,就是把前面提到的API KEY和你所要发的信息(经过utf-8转码)封装成url,然后发送get请求得到服务器的响应。整个调用过程最主要的也就是这几句代码,那么下面我们就看看这部分代码的具体编写。

  首先,我们先创建一个工具类HttpUtils,这个工具类包含了发送get请求,接收数据过程以及将Json转化成Java对象的过程。

  首先写一个函数把请求参数封装起来:

private static String setParam(String msg) {        String requesturl = "";        try {            requesturl = URL + "?key=" + APIKEY + "&info="                    + URLEncoder.encode(msg, "utf-8");  //官网给出的需要的请求参数        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return requesturl;    }

  这段代码就不用我解释了吧。。其实就是官网中的给出的方法。

  然后就是发送get请求并接收数据了

public static String doGet(String msg) {        String result = "";        String url = setParam(msg);             //调用setParam函数得到请求参数        ByteArrayOutputStream baos = null;              //使用ByteArrayOutputStream输出流        InputStream is = null;           //定义输入流        try {            java.net.URL realURL = new java.net.URL(url);       //创建url            HttpURLConnection conn = (HttpURLConnection) realURL                    .openConnection();               //打开连接            conn.setReadTimeout(5 * 1000);            //设置读取时的超时值            conn.setConnectTimeout(5 * 1000);       //设置连接超时值            conn.setRequestMethod("GET");             //设置请求方式            is = conn.getInputStream();    //设置输入流            int len = -1;              byte[] bytes = new byte[128];  //设置缓冲区            baos = new ByteArrayOutputStream();            while ((len = is.read(bytes)) != -1) {  //从输入流读取数据存入缓冲区直到结束                baos.write(bytes, 0, len);  //把数据从缓冲区写到输出流            }            baos.flush();   //刷新输出流            result = new String(baos.toByteArray());  //将输出的字节流转化成byte数组        } catch (MalformedURLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (Exception e) {            e.printStackTrace();        } finally {            if (baos != null) {  //关闭输出流                try {                    baos.close();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }            if (is != null) {                try {                    is.close();  //关闭输入流                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        }        return result;    }

 以上代码中用到了http get请求的发送方式以及输入输出流的一些用法, 如果读者们有不懂的地方可以上网查询一下这方面的资料,因为我不可能把里面每一个用到的知识点都写的很详细。通过查阅资料,大家至少可以掌握get请求发送方法以及输入输出流的一些知识和用法。

  由于收到的是Json格式的数据,还需将其转成Java对象才可以使用,此处的方法有很多,我们这里采用的是用gson将json转成java的方法。时间有限,具体的一些细节我下次再写吧,大家可以给我多提点意见。

  相关解决方案