之前介绍了使用Http的get和post 方式进行网络通信,本文介绍使用HttpClient的HttpGet以及进行网络通信。
首先要确保当前项目已经包含了Apache的支持库
下载链接:http://hc.apache.org/downloads.cgi
如果没有包含该库文件,首先将将上面下载下来的文件中的lib中的.jar包全部拷贝到项目的libs下面,在Android Studio中工程目录下选中进行addaslibrary.
HttpGet通信
上面的步骤完成后可以来使用,先新建一个HttpClient:
HttpClient client=new DefaultHttpClient();
新建一个HttpGet,参数是一个url字符串:
HttpGet httpGet=new HttpGet("http://fanyi.youdao.com/openapi.do?keyfrom=SkyHttpGetTest&key=545323935&type=data&doctype=json&version=1.1&q=hello");
通过httpClient.execute(httpGet),发送Get请求,参数是HttpUriRequest,而HttpGet和HttpPost都继承于它,所以下一篇的HttpPost发送请求用的是同样的方式,该方法返回一个HttpResponse;
HttpResponse responnse=client.execute(httpGet);
之前在用http的get和post方式通信时,都是获得HttpURLConnection的输入流来读取数据的,即connection.getInputStream(),使用HttpClient获取返回数据的方式为先获得一个返回的HttpResponse对象并取得数据实体,再读取数据实体的内容:getContent()返回的是一个输入流InputStream:
HttpEntity entity=response.getEntity();
InputStream in=entity.getContent();
//接下来用IO操作进行数据的读取
.
.
.
HttpPost通信
如前面HttpGet方式一样,新建HttpClient
新建HttpPost:
HttpPost httpPost=new HttpPost("http://fanyi.youdao.com/openapi.do");
注意到和之前HttpGet方式的不同了吗,前面的HttpGet将要提交的表单数据直接放在了Url的后面,而HttpPost是不直接写在后面的。
既然表单数据不放在URL后面,我们的设置HttpPost的表单内容,这里不能像之前http的Post方式一样获得一个OutputStream写入数据,而是设置一个HttpEntity实体
//构建一个ArrayList,类型为BasicNameValuePair(键值对),里面存放的是表单数据
list.add(new BasicNameValuePair("keyfrom","SkyHttpGetTest"));
list.add(new BasicNameValuePair("key","545323935"));
list.add(new BasicNameValuePair("type","data"));
list.add(new BasicNameValuePair("doctype",params[0]));
list.add(new BasicNameValuePair("version","1.1"));
list.add(new BasicNameValuePair("q",params[1]));
httpPost.setEntity(new UrlEncodedFormEntity(list));
接下里就和HttpGetHttpClient执行:
HttpResponse response=client.execute(httpPost);
HttpEntity entity=response.getEntity();
InputStream in=entity.getCotent();
//...数据读取操作