很多时候,我们的app客户端是需要和我们的web端共用同一个服务器端的。
但有时,我们需要来取得数据中的数据对我们的app客户端进行一些事物处理(例如用户登陆的用户名密码正确性的校验)。
通常的情况下我们会在我们的app程序中写sqllite来进行sql查询,但是最近兴起了一门跨应用的交互的http协议,即httpclient。
应用httpclient我们要在我们的服务器端做好相应的接口,在app端编写httpclient来调用服务器端的接口进行相应的数据交互
废话不多说,代码走起。
package com.example.OA.HttpClientToServer;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* /*************
*
* @author to-two-to
* @des httpclient客户端请求程序
* @date 2014年9月19日
*
*/
public class HttpClient_To_Server {
HttpClient httpClient;
/**
*
* @param urlAddress:请求地址
* @param username:用户名
* @param password:密码
* @return String类型的请求结果(成功:"true",)
* @throws Exception
*/
public String doGet(String urlAddress,String username,String password){
httpClient= new DefaultHttpClient();
urlAddress = urlAddress + "?UNAME="+username+"&PASSWORD="+password;
try{
// 创建HttpGet对象。
HttpGet get = new HttpGet(urlAddress);
// 发送GET请求
HttpResponse httpResponse = httpClient.execute(get);
// 如果服务器成功地返回响应
if (httpResponse.getStatusLine()
.getStatusCode() == HttpStatus.SC_OK)
{
// 获取服务器响应字符串
String result = EntityUtils.toString(httpResponse.getEntity());
return result;
}
else {
// 如果服务器失败返回响应数据"error"
return "error";
}
}catch(Exception e){
e.printStackTrace();
return "获取数据失败!";
}finally{
// 关闭HttpClient
httpClient.getConnectionManager().shutdown();
}
}
/**
*
* @param url 发送请求的URL
* @param rawParams 请求参数
* @return 服务器响应字符串
* @throws Exception
*/
public String postRequest(String url
, Map<String ,String> rawParams)
{
httpClient = new DefaultHttpClient();
try{
// 创建HttpPost对象。
HttpPost post = new HttpPost(url);
// 如果传递参数个数比较多的话可以对传递的参数进行封装
List<NameValuePair> params = new ArrayList<NameValuePair>();
for(String key : rawParams.keySet())
{
//封装请求参数
params.add(new BasicNameValuePair(key , rawParams.get(key)));
}
// 设置请求参数,并指定客户端传输的编码格式为UTF-8,以防中文乱码的出现
post.setEntity(new UrlEncodedFormEntity(
params, HTTP.UTF_8));
// 发送POST请求
HttpResponse httpResponse = httpClient.execute(post);
// 如果服务器成功地返回响应
if (httpResponse.getStatusLine()
.getStatusCode() == 200)
{
// 获取服务器响应字符串
String result = EntityUtils
.toString(httpResponse.getEntity());
// 返回服务的响应字符串给客户端
return result;
} else {
// 如果服务器失败返回响应数据"error"
return "error";
}
}catch(Exception e){
e.printStackTrace();
}finally{
// 关闭HttpClient
httpClient.getConnectionManager().shutdown();
}
return null;
}
}