【Android】 HttpClient 发送REST请求
直接po代码吧,第一个是一个枚举类型的类,是四种rest http请求,get/post/put/delete:
public enum HttpRequestMethod {
HttpGet {
@Override
public HttpUriRequest createRequest(String url) { return new HttpGet(url); }
},
HttpPost {
@Override
public HttpUriRequest createRequest(String url) { return new HttpPost(url); }
},
HttpPut {
@Override
public HttpUriRequest createRequest(String url) { return new HttpPut(url); }
},
HttpDelete {
@Override
public HttpUriRequest createRequest(String url) { return new HttpDelete(url); }
};
public HttpUriRequest createRequest(String url) { return null; }
}
接下来是一个HttpUtil类,作用是可以指定http请求类型、访问的url和带的参数:
public class HttpUtil {
private static final String DEFAULT_LOCAL_ENCODE = "UTF-8";
private static final String DEFAULT_REMOTE_ENCODE = "UTF-8";
private static final int HTTP_200 = 200;
public static HttpClient httpClient = new DefaultHttpClient();
static {
httpClient.getParams().setParameter(HttpConnectionParams.SO_TIMEOUT, Integer.valueOf(5000));
httpClient.getParams().setParameter(HttpConnectionParams.CONNECTION_TIMEOUT, Integer.valueOf(3000));
}
public static final String BASE_URL = "localhost:8080/demo/login";
public static String sendRequest(HttpRequestMethod requestMethod,
String url,final Map<String ,String> params) throws Exception {
final HttpUriRequest request = requestMethod.createRequest(url);
if(params != null) {
((HttpEntityEnclosingRequest)request).setEntity(
new UrlEncodedFormEntity(MapToPair(params), DEFAULT_REMOTE_ENCODE));
}
FutureTask<String> task = new FutureTask<String>(
new Callable<String>() {
@Override
public String call() throws Exception {
HttpResponse response = httpClient.execute(request);
if(response.getStatusLine().getStatusCode() == HTTP_200) {
return EntityUtils.toString(response.getEntity(), DEFAULT_LOCAL_ENCODE);
}
return "访问失败";
}
}
);
new Thread(task).start();
return task.get();
}
static List<NameValuePair> MapToPair(Map<String, String> map) {
final List<NameValuePair> pairList = new ArrayList<NameValuePair>();
for (String key : map.keySet()){
pairList.add(new BasicNameValuePair(key, map.get(key)));
}
return pairList;
}
}
里面用到了跟多线程有关的FutureTask类,不是很了解先用着,感觉多线程、并发相关的东西还是挺多的而且很重要,这里使用多线程是因为可能会有IO阻塞,这样会导致主界面挂掉。
回想一下,在移动应用程序中,长时间的操作(如网络、文件或长的计算)不应该在主系统线程上完成。相反,应在一个单独的工作线程中执行它们。阻塞系统线程会对应用程序的用户界面的响应能力产生负面影响,有可能导致强行关闭您的应用程序。
调用的话很简单,只需要:
HttpUtil.sendRequest(HttpRequestMethod.HttpPost, url, map);
其中map是一个HashMap<String, String>类型的。
大功告成~虽然很简单,但是毕竟第一次写,学习到不少,当然也想知道HttpClient底层是如何实现的,肯定是封装了socket但是内部一定有一些很有意思的东西。
另外,关于TCP/IP也是水深的可以,接下来要做聊天了,稍微了解了一下长连接和短链接,以及心跳机制和轮询机制,以后会慢慢都写到博客。
【Android】 HttpClient 发送REST请求的更多相关文章
- android httpclient 发送 PATCH 请求
Put 用于全部更新 Patch 用于部分更新 重写一下 HttpPut 或 HttpPost 的 getMethod 方法 /** * Send a patch request */ public ...
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- Android系列之网络(一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android之网络----使用HttpClient发送HTTP请求(通过get方法获取数据)
[正文] 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层 ...
- 网络相关系列之中的一个:Android中使用HttpClient发送HTTP请求
一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 "超文本传输协议",是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议,是 ...
- (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...
- 【JAVA】通过HttpClient发送HTTP请求的方法
HttpClient介绍 HttpClient 不是一个浏览器.它是一个客户端的 HTTP 通信实现库.HttpClient的目标是发 送和接收HTTP 报文.HttpClient不会去缓存内容,执行 ...
- Httpclient发送json请求
一.Httpclient发送json请求 public String RequestJsonPost(String url){ String strresponse = null; try ...
- .net core使用HttpClient发送代理请求_程序内抓包_Fiddler抓包
前言: 通过Fiddler抓取浏览器请求数据,相信大家已经都会用了,我们知道Fiddler是通过在本机计算器添加一个默认的代理服务器来实现的抓包数据的,端口号为:8888. 其实当我们打开Fiddl ...
- (三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
文章来源:http://www.cnblogs.com/smyhvae/p/4006009.html 一.GET和POST的对比: 在漫长的时间当中,其他的方法逐渐的退出了历史舞台,最常用的只剩下GE ...
随机推荐
- Adore 解题报告
Adore 问题描述 小\(\text{w}\) 偶然间得到了\(1\)个 \(DAG\). 这个 \(DAG\) 有 \(m\) 层,第\(1\)层只有\(1\)个源点,最后\(1\)层只有\(1\ ...
- 【BZOJ 1070】[SCOI2007]修车 费用流
就是拆个点限制一下(两点一排一大片),这道题让我注意到了限制这个重要的词.我们跑网络流跑出来的图都是有一定意义的,一般这个意义就对应了问题的一种方案,一般情况下跑一个不知道对不对的方案是相对容易的我们 ...
- Vue获取DOM元素样式 && 样式更改
在 vue 中用 document 获取 dom 节点进行节点样式更改的时候有可能会出现 'style' is not definde的错误, 这时候可以在 mounted 里用 $refs 来获取样 ...
- The XOR Largest Pair [Trie]
描述 在给定的N个整数A1,A2--AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N,第二行N个整数A1-AN. 输出格式 一个整数表示答案. 样例输入 3 1 2 3 ...
- Windows Time Client
Timezone: UTC Coordinated Universal Time ====Perform by Local / administrator must,configure Time se ...
- 解读dbcp自动重连那些事
转载自:http://agapple.iteye.com/blog/791943 可以后另一篇做对比:http://agapple.iteye.com/blog/772507 同样的内容,不同的描述方 ...
- Spring学习--基于 XML 的配置声明切面
正常情况下 , 基于注解的生命要优先于基于 XML 的声明. 通过 AspectJ 注解 , 切面可以与 AspectJ 兼容 , 而基于 XML 的配置则是 Spring 专有的.由于 Aspect ...
- CCCC练习即感
字符串进行初始化时不能通过char a[10]={'\0'}来简单进行,写循环或者memset,亲测有效,以及初始化分好情况,用空格还是'\0',别乱搞. 有一个有意思的题,连续因子,从2开始,依次向 ...
- Sequence(ST表)(洛谷P2048)
超级钢琴 知识储备 在做这道题前,我们先要了解一下ST表(一种离线求区间最值的方法) ST表使用DP实现的,其查询复杂度为O(1). 那么我们怎么用DP实现呢?? 首先,我们设立一个状态f[i][j] ...
- PHP中HTTP_X_FORWARDED_FOR、REMOTE_ADDR和HTTP_CLIENT_IP
1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 3.HTTP_CLIENT_IP:客户端的ip 在PHP ...