Android REST webservice 类
App与后台交互,后台使用的是Jersey RESTful 服务。在APP端使用Android 内部集成的HttpClient接口,无需引入第三方jar包,
import org.apache.http.client.HttpClient;
在网上找到一个歪果人写Android端的REST类,网上文章引用挺多的。
Calling Web Services in Android using HttpClient
public class RestClient { private ArrayList <NameValuePair> params;
private ArrayList <NameValuePair> headers; private String url; private int responseCode;
private String message; private String response; public String getResponse() {
return response;
} public String getErrorMessage() {
return message;
} public int getResponseCode() {
return responseCode;
} public RestClient(String url)
{
this.url = url;
params = new ArrayList<NameValuePair>();
headers = new ArrayList<NameValuePair>();
} public void AddParam(String name, String value)
{
params.add(new BasicNameValuePair(name, value));
} public void AddHeader(String name, String value)
{
headers.add(new BasicNameValuePair(name, value));
} public void Execute(RequestMethod method) throws Exception
{
switch(method) {
case GET:
{
//add parameters
String combinedParams = "";
if(!params.isEmpty()){
combinedParams += "?";
for(NameValuePair p : params)
{
String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),”UTF-8″);
if(combinedParams.length() > 1)
{
combinedParams += "&" + paramString; // 如何不是添加第一个key-value时
}
else
{
combinedParams += paramString; // 添加第一个key-value
}
}
} HttpGet request = new HttpGet(url + combinedParams); //add headers
for(NameValuePair h : headers)
{
request.addHeader(h.getName(), h.getValue());
} executeRequest(request, url);
break;
}
case POST:
{
HttpPost request = new HttpPost(url); //add headers
for(NameValuePair h : headers)
{
request.addHeader(h.getName(), h.getValue());
} if(!params.isEmpty()){
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
} executeRequest(request, url);
break;
}
}
} private void executeRequest(HttpUriRequest request, String url)
{
HttpClient client = new DefaultHttpClient(); HttpResponse httpResponse; try {
httpResponse = client.execute(request);
responseCode = httpResponse.getStatusLine().getStatusCode();
message = httpResponse.getStatusLine().getReasonPhrase(); HttpEntity entity = httpResponse.getEntity(); if (entity != null) { InputStream instream = entity.getContent();
response = convertStreamToString(instream); // Closing the input stream will trigger connection release
instream.close();
} } catch (ClientProtocolException e) {
client.getConnectionManager().shutdown();
e.printStackTrace();
} catch (IOException e) {
client.getConnectionManager().shutdown();
e.printStackTrace();
}
} private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder(); String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
调用实例:
RestClient client = new RestClient(LOGIN_URL);
client.AddParam("accountType", "GOOGLE");
client.AddParam("source", "tboda-widgalytics-0.1");
client.AddParam("Email", _username);
client.AddParam("Passwd", _password);
client.AddParam("service", "analytics");
client.AddHeader("GData-Version", "2"); try {
client.Execute(RequestMethod.POST);
} catch (Exception e) {
e.printStackTrace();
} String response = client.getResponse();
GET 方法没有问题,但是POST方法就需要考虑了,因为传递内容并不是只有
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); 比如自己的项目中使用的是:request.setEntity(new StringEntity(obj.toString(),HTTP.UTF_8)); 这里的 setEntity 内容是和setHeader 有关系的。 我的项目中应用的两种:postRequest.addHeader("Content-Type", "multipart/mixed"); post 图片的header
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart("uploaded", bab);
postRequest.setEntity(reqEntity);
POST json 对象的:header 说明
rest.AddHeaders("Content-Type","application/json;charset=utf8");
Entity这样设置的:
request.setEntity(new StringEntity(obj.toString(),HTTP.UTF_8));
所以这个类写的通用型不行。
Android REST webservice 类的更多相关文章
- Android调用WebService(转)
Android调用WebService WebService是一种基于SOAP协议的远程调用标准,通过 webservice可以将不同操作系统平台.不同语言.不同技术整合到一块.在Android SD ...
- android loginDemo +WebService用户登录验证
android loginDemo +WebService用户登录验证 本文是基于android4.0下的loginActivity Demo和android下的Webservice实现的.l ...
- Android 与 Webservice 的快速保存
前面写了一篇android对sqllite的快速保存博客,今天我们来看看android与webservice的交互,相信很多有经验的人自然就想到了soap.但是如果在小型项目中,具有大材小用之嫌.实际 ...
- Android平台调用WebService详解
上篇文章已经对Web Service及其相关知识进行了介绍(Android开发之WebService介绍 ),相信有的朋友已经忍耐不住想试试在Android应用中调用Web Service.本文将通过 ...
- Android GIS +webservice
Android新手经典入门教程 Android开发教程(完全免费版) Android SDK v3.1.0 Android定位功能(一) Android定位功能(二) Android 百度地图开发(一 ...
- 网摘Android调用WebService
这边特别注意调用的.net WCF 接口的绑定方式.以前一直用的wxHttpbinding,一直连不上.改成BasicHTTPbinding就能连上了 上篇文章已经对Web Service及其相关知识 ...
- Android使用webService(发送xml数据的方式,不使用jar包)
Android使用webService可以用ksoap2.jar包来使用.但是我觉得代码不好理解,而且记不住. 所以我查询了好多资料,以及自己的理解.可以用代码发送http请求(发送xml数据)来访问 ...
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...
- 53. Android常用工具类
主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...
随机推荐
- Laravel建站03--建立前台文章列表和文章详情
经过了前面的开发环境搭建和数据库配置.git配置的准备工作以后,现在可以开始动作做点什么了. 先从简单的开始,那就先来个文章列表和详情页吧. 这期间可以学习到路由.建立model.controller ...
- UNIX网络编程卷1 时间获取程序client UDP 协议无关
本文为senlie原创.转载请保留此地址:http://blog.csdn.net/zhengsenlie /** * UDP.协议无关,调用 getaddrinfo 和 udp_client **/ ...
- 压力测试工具siege
最近整改了一个线上服务,功能自测完毕后,需要进行性能的压力测试,同事推荐了siege这个工具,先熟悉一下相关的东西,后面有时间再好好研究它的源码实现.本文仅仅简单介绍一下这个工具的使用方法. 1.下载 ...
- 解决错误: ios property has a previous declaration
今天维护一个项目的时候,我新添加了一个库,运行的时候报错了: ios property has a previous declaration 上网查了一下没有找到思路,不过根据提示自己试了一下,原来这 ...
- oracle序列在insert into 语句中的使用
很多人创建了序列,但是在插入语句中不知道怎么使用,在此做个简单介绍. oracle序列有两个参数:nextval和currval,使用的时候,需要输入sequence_name.nextval或seq ...
- Makefile 多个目标匹配的问题
在windows下直接使用mingw32-make # ZTHREAD_A the static link library file of ZThread ZTHREAD_A = F:/ZJ/tool ...
- JDK 6 目录结构介绍以及JDK中的工具研究
要想深入了解Java必须对JDK的组成, 本文对JDK6里的目录做了基本的介绍,主要还是讲解 了下JDK里的各种可执行程序或工具的用途 Java(TM) 有两个平台 JRE 运行平台,包括Jav ...
- PHP 操作SQLite
连接数据库 下面的 PHP 代码显示了如何连接到一个现有的数据库.如果数据库不存在,那么它就会被创建,最后将返回一个数据库对象. <?php class MyDB extends SQLite3 ...
- 一点一滴之DBUS
记录几个参考链接: http://www.cnblogs.com/muxue/archive/2012/12/02/2798876.html --- DBus 入门与应用 -- DBus 的 C 编 ...
- 解决Deepin每次打开Chome都提示解锁登录密钥环的麻烦
密钥环是linux系统用于安全保存程序私密数据的模块,可以用于加密保存密码.证书.密钥等安全数据.chrome的密钥环用于保存本地访问站点密码或缓存从google服务器同步下来的访问站点的密码. De ...