借助API,可快速实现在安卓手机上的与智能机器人聊天的功能。大体的步骤有:1、异步请求数据;2、解析json数据;3、封装数据;4、实现布局;
源代码下载地址:http://download.csdn.net/detail/leyezhiqiu/9471571
实现效果如下图:
下面一一介绍。
1、在浏览器上获取与机器人对话的数据。
1)打开图灵机器人官网,注册账号www.tuling123.com/openapi 。
2)登录账号,记录下官方分配给账号的key。
3)在账号中查看获得数据的格式,如get的请求方式格式:http://www.tuling123.com/openapi/api?key=XXX&info=XXXXX&userid=XXXXXXX
4)在浏览器上测试能否通过get方式获得对应数据。
2、在Android工程中获取数据。
1)编写异步通信类HttpData.java:发送请求,获取数据,读取数据。
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.os.AsyncTask;
/**
* 异步通信类
*
* @author mingyue
*
*/
public class HttpData extends AsyncTask<String, Void, String> {
private HttpClient httpClient;
private HttpGet httpGet;
private HttpResponse httpResponse; // 获取请求返回的数据
private HttpEntity httpEntity;// 创建http实体
private InputStream in; // 将获取到的数据转化为流文件
private HttpGetDataListener listener;// 实现自定义的HttpGetDataListener接口,并且构造化传递参数
private String url;
public HttpData(String url, HttpGetDataListener listener) {
this.url = url;
this.listener = listener;
}
@Override
protected String doInBackground(String... params) {
// 实现接口后重写此方法,此方法的作用是:发送get请求后,获取数据
try {
httpClient = new DefaultHttpClient();// 实例化客户端
httpGet = new HttpGet(url);// 使用get方式,通过发送URL来请求
httpResponse = httpClient.execute(httpGet); // 通过客户端发送请求
httpEntity = httpResponse.getEntity();// 通过httpResponse对象获取数据
in = httpEntity.getContent();// 获取实体的具体内容
BufferedReader br = new BufferedReader(new InputStreamReader(in));// 获取到具体内容后,通过缓冲区进行读取
String line = null; // 读取数据
StringBuffer sb = new StringBuffer();// 储存所有数据
while ((line = br.readLine()) != null) { // 读取缓冲区的数据
sb.append(line); // 存储数据到StringBuffer中
}
return sb.toString();// 转换为String类型
} catch (Exception e) {
}
return null;
}
/**
* 重写此方法,通过这方法获取数据
*/
@Override
protected void onPostExecute(String result) {
listener.getDataUrl(result);// 返回数据
super.onPostExecute(result);
}
}
2)由于要将获取到的数据传递给其它页面,所有这里新建一个接口,采用回调的方式。
//HttpGetDataListener.java
public interface HttpGetDataListener {
void getDataUrl(String data);
}
3)在MainActivity中实现HttpGetDataListener接口,测试能否获得数据。
具体代码如下:
public class MainActivity extends Activity implements HttpGetDataListener{
private HttpData httpData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
httpData = (HttpData) new HttpData(
"http://www.tuling123.com/openapi/api?key=XXXXX&info=北京",
this).execute();//execute()启动异步通信,注意:XXXXX应该是在步骤1获取的key值
}
/**
*实现抽象方法
*/
@Override
public void getDataUrl(String data) {
System.out.println(data);
}
}
4)运行代码,在logcat中能看到相关的json数据,则说明数据获取成功。
3、解析json数据。
在MainActivity.java中编写parseText()方法,解析数据,在getDataUrl()方法中调用parseText()方法。
代码如下:
@Override
public void getDataUrl(String data) {
System.out.println(data);
parseText(data);
}
public void parseText(String str){
try {
JSONObject jb = new JSONObject(str);
System.out.println(jb.getString(