- 浏览: 277781 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
flyingsnowff:
支付宝官方在线文档中心:https://doc.open.al ...
如何集成支付宝官方文档 -
timer_yin:
果然是这样
[转帖] 安装Eclipse插件长时间卡在 calculating requirements and dependencies -
dai_lm:
lyx0224 写道强~~~~~过奖,只是总结了前人的智慧,拼 ...
通过Wifi实现设备间的通信 -
lyx0224:
强~~~~~
通过Wifi实现设备间的通信 -
Goro:
帅!
自己封装的支持自动对焦的CameraView
目的是为了不依赖第三方的jar包进行网络请求(如:commons-httpclient.jar)
修改了一下,可以自定义请求的Header,增加了对POST表单数据的支持。
1. 建立一个连接配置类
2. 封装请求类
3. 调用
GET请求
POST请求
这个几乎就是完整的代码了呀
修改了一下,可以自定义请求的Header,增加了对POST表单数据的支持。
1. 建立一个连接配置类
class UserAgentConfig { public String host; public String scheme = "http"; public int port = 80; public int timeoutConnection = 3000; public int timeoutSocket = 20000; public String username = ""; public String password = ""; }
2. 封装请求类
public class HttpRequest { private String mUrl; private UserAgentConfig mConfig = null; private HashMap<String, String> mHeaders = null; private HttpEntity mBody = null; private int mStatus = -1; public HttpRequest(String url) { mUrl = url; } public void addHeader(String key, String value) { if (mHeaders == null) mHeaders = new HashMap<String, String>(); mHeaders.put(key, value); } public void clearHeader() { mHeaders.clear(); mHeaders = null; } public void setConfig(UserAgentConfig config) { mConfig = config; } public void setPostBody(List<BasicNameValuePair> body) { try { mBody = new UrlEncodedFormEntity(body, "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } public void setPostBody(String body) { try { mBody = new StringEntity(body); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } public void execute() throws ClientProtocolException, IOException { httprequest(); } public int getStatusCode() { return mStatus; } /** * get "Stream" as response * * @return response in stream * @throws IOException * @throws ClientProtocolException */ public InputStream getStream() throws ClientProtocolException, IOException { HttpEntity entity = httprequest(); InputStream ret = null; if (entity != null) { try { byte[] b = EntityUtils.toByteArray(entity); ret = new ByteArrayInputStream(b); } finally { release(entity); } } return ret; } /** * get "String" as response * * @return response in string * @throws IOException * @throws ClientProtocolException */ public String getString() throws ClientProtocolException, IOException { HttpEntity entity = httprequest(); String ret = null; if (entity != null) { try { ret = EntityUtils.toString(entity); } finally { release(entity); } } return ret; } /** * release connection resource * * @param entity */ private static void release(HttpEntity entity) { try { entity.consumeContent(); } catch (IOException e) { e.printStackTrace(); } } /** * get "HttpEntity" as response * * @return * @throws IOException * @throws ClientProtocolException */ private HttpEntity httprequest() throws ClientProtocolException, IOException { System.out.println(mUrl); DefaultHttpClient client = null; HttpEntity entity = null; BasicHttpParams httpParameters = new BasicHttpParams(); if (mConfig != null) { // set connection timeout HttpConnectionParams.setConnectionTimeout(httpParameters, mConfig.timeoutConnection); } client = new DefaultHttpClient(httpParameters); DefaultHttpRequestRetryHandler retryHandler = new DefaultHttpRequestRetryHandler( 3, true); client.setHttpRequestRetryHandler(retryHandler); // set username & password if available if (mConfig != null && !(isEmpty(mConfig.username) && isEmpty(mConfig.password))) { AuthScope as = new AuthScope(mConfig.host, mConfig.port); UsernamePasswordCredentials upc = new UsernamePasswordCredentials( mConfig.username, mConfig.password); client.getCredentialsProvider().setCredentials(as, upc); } // check get or post method by params HttpRequestBase method = null; if (mBody == null) { method = new HttpGet(mUrl); } else { method = new HttpPost(mUrl); ((HttpPost) method).setEntity(mBody); } // set request header if (mHeaders != null) { Iterator<?> iter = mHeaders.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<?, ?> entry = (Entry<?, ?>) iter.next(); String key = (String) entry.getKey(); String val = (String) entry.getValue(); method.setHeader(key, val); } } // get response HttpResponse response = null; if (mConfig == null || isEmpty(mConfig.host) || isEmpty(mConfig.scheme)) { // only URL is available response = client.execute(method); } else { BasicHttpContext localContext = new BasicHttpContext(); BasicScheme basicAuth = new BasicScheme(); localContext.setAttribute("preemptive-auth", basicAuth); HttpHost targetHost = new HttpHost(mConfig.host, mConfig.port, mConfig.scheme); response = client.execute(targetHost, method, localContext); } mStatus = response.getStatusLine().getStatusCode(); entity = response.getEntity(); return entity; } /** * Check the string is valuable or not * * @param s * @return true if s is null or s.length() == 0 false otherwise */ private boolean isEmpty(String s) { return s == null || s.length() == 0; } }
3. 调用
GET请求
HttpRequest request = new HttpRequest("..."); request.execute();
UserAgentConfig config = new UserAgentConfig(); config.host = "..."; config.username = "..."; config.password = "..."; HttpRequest request = new HttpRequest("..."); request.setConfig(config); System.out.println(request.getString());
POST请求
HttpRequest request = new HttpRequest("..."); request.addHeader("...", "..."); request.setPostBody("...."); request.execute(); System.out.println(request.getStatusCode());
评论
2 楼
dai_lm
2011-09-14
qinweiping 写道
有完整的源码吗 发我一份 995308963@qq.com
这个几乎就是完整的代码了呀
1 楼
qinweiping
2011-09-13
有完整的源码吗 发我一份 995308963@qq.com
发表评论
-
获取Android Device的信息
2013-12-26 15:47 1496String phoneInfo = "PROD ... -
看雪学院-Android安全
2013-11-25 09:40 997http://bbs.pediy.com/forumdispl ... -
Toast原来也可以多样化
2013-09-18 13:48 1218Style 1: 默认 Toast def = Toast ... -
Google Map API V2
2013-05-13 13:37 2241以后如果要开发包含google map的程序就更麻烦咯 htt ... -
用OpenGL实现无限循环的coverflow
2013-04-26 14:16 4894网上找了很久,都是用Gallery实现的,效果不是很满意,结果 ... -
如何集成支付宝官方文档
2013-02-08 11:24 4546官方文档下载地址 https://b.alipay.com/o ... -
[转帖]裁剪图片
2013-01-30 17:22 986原帖:http://www.linuxidc.com/Linu ... -
MonkeyRunner的使用
2013-01-29 13:06 9737要使用MonkeyRunner,就要 ... -
重复执行某段代码
2012-12-29 14:36 1615用handler就可以了 private Handler ... -
选择音频的输出方式
2012-12-12 15:00 1999可以选择用耳机还是扬声器播放(蓝牙的就留到下次吧),要求SDK ... -
使FrameLayout的Gravity等于Center
2012-12-06 16:42 1777由于无法设置FrameLayout的Gravity,所以只能通 ... -
在Android上模拟MetroUI
2012-10-31 15:49 2671在Android上模拟WP7的MetroUI MetroIt ... -
Uri.Builder与String互转
2012-08-14 15:56 2378Uri.Builder -> String Uri. ... -
判断屏幕尺寸
2012-07-17 10:21 1910// support from API 4 final ... -
自己封装的支持自动对焦的CameraView
2012-07-12 13:52 3692import java.io.BufferedOutp ... -
ADT 离线包下载地址
2012-07-06 14:32 2092更新ADT真是件苦恼的事啊 20.0.0的下载地址 http ... -
通过Wifi实现设备间的通信
2012-06-05 15:19 2091服务器端,建立监听(方法更新,可以同时连接多个Client) ... -
IP地址的获取及解析
2012-06-05 13:31 1289获取IP地址 WifiManager wifiManage ... -
判断网络是否有效
2012-05-28 17:32 996protected boolean isInternetA ... -
悬浮窗
2012-05-28 17:21 3132类似于360监视网络速度的那个悬浮窗 public cl ...
相关推荐
在Android系统中,HTTP请求可以通过多种方式实现,如使用Android自带的HttpURLConnection,或者是第三方库如Volley、Retrofit、OkHttp等。OkHttp因其高效的性能、良好的API设计以及丰富的特性,成为了许多开发者首选...
1. HttpURLConnection:Android SDK自带的一种网络请求方式,适用于简单的HTTP请求。它可以实现GET、POST等基本请求方法,但配置起来相对繁琐,不适用于复杂的网络请求场景。 2. HttpClient:虽然已被弃用,但在旧...
在Android应用开发中,进行网络通信是不可或缺的一部分,而HTTP请求是网络通信中最常见的操作。在用户界面(UI)线程上执行网络操作会导致应用程序无响应(ANR),因此,Android推荐使用异步HTTP请求来避免阻塞主线...
Android网络编程是移动应用...无论是使用Android SDK自带的HttpURLConnection还是选择一个第三方的库,了解如何正确处理网络请求、如何优化网络通信以及如何提高应用的响应性和安全性,都是移动应用开发者必备的技能。
常见的数据格式有JSON和XML,可以使用Gson库解析JSON,或者使用Android自带的XmlPullParser解析XML。 6. **错误处理**:网络请求可能会失败,应捕获并处理IOException、SocketTimeoutException等异常。同时,对于...
HttpURLConnection是Android自带的API,可以用来发送HTTP请求。OkHttp则提供了更高效的网络通信,支持连接池和自动重试机制。在这个场景下,我们需要发送一个GET请求到图片的URL来获取数据。 其次,由于网络请求...
Android源码资源包是开发Android应用或进行系统级定制时不可或缺的一部分。这个压缩包包含了Android操作系统的源代码,主要用于深入理解Android的工作原理、调试应用程序、优化性能或者进行自定义ROM的开发。解压后...
常见的网络请求库有Android自带的HttpURLConnection,但更多开发者倾向于使用第三方库,如OkHttp和Volley,它们提供了更高效的性能和易用的API。 1. OkHttp:这是一个广泛使用的网络请求库,以其高性能、低内存占用...
老罗的Android视频系列中专门有一章讲解了如何利用HTTP协议进行开发,这个开发包就是为了配合该章节内容而提供的。在这个压缩包中,包含了与HTTP协议开发相关的资源和示例代码,确保开发者可以跟随教程实践。 首先...
调用Android自带日历功能是Android开发中一个实用的功能,它允许开发者在应用程序中集成与设备内置日历的交互,从而提升用户体验。以下是对这一功能的深入解析及相关知识点的详细介绍。 ### 调用Android日历功能 ...
标题中的“Android 自带Samples”指的是Android SDK中包含的一系列示例项目,这些项目展示了如何使用Android API来实现特定功能或交互。 描述中提到的"ApiDemos"是Android Samples中最为经典的一个,它几乎包含了...
总的来说,Android 8.0 系统自带的 SoundRecorder 是一个实用且高效的录音工具,无论是在日常生活中记录灵感,还是在工作中进行会议记录,都能提供稳定可靠的服务。了解并掌握它的功能和使用技巧,将有助于我们更好...
Android应用经常需要进行网络操作,如HTTP请求、WebSocket通信、下载上传等。samples中的网络示例展示了如何使用HttpURLConnection、OkHttp、Volley等库进行网络请求,以及如何处理JSON或XML数据。 五、多媒体与...
与Android自带的HttpURLConnection相比,OKHttp提供了更好的性能和更低的资源消耗。它支持HTTP/1.1和HTTP/2协议,同时具备连接池、响应缓存、请求重试和连接超时等功能,极大地提高了网络请求的效率。 ### 特性 1....
Android系统的自带相册是用户与设备之间进行图片和视频浏览、管理的重要接口,其源码包含了丰富的Android开发知识,包括UI设计、图片处理、数据管理等多个方面。对于Android开发者来说,深入理解这个组件的源码,...
总的来说,通过深入研究Android系统上层应用的源代码,开发者不仅可以提高自己的编程技巧,还能更好地理解和利用Android平台的各种特性和服务,从而创造出更高效、更稳定、更具创新性的应用。这是一条通往Android...
然而,需要注意的是,由于HttpClient在较新的Android版本中已被弃用,推荐使用Android自带的HttpURLConnection或者更现代的第三方库,如OkHttp。同样,对于新项目,考虑使用RESTful API和像Retrofit这样的库,可能比...
- **抓包权限**:某些Android应用可能会对网络请求进行加密或使用自签名证书,此时可能需要安装Fiddler提供的根证书到Android设备上,才能完整地捕获HTTPS流量。 #### 使用Fiddler分析数据 完成以上配置后,即可...
网络定位主要利用移动网络基站或者Wi-Fi热点的信息,通过三角定位原理估算设备的位置。这种定位方法的优点在于快速、省电,而且在室内通常也能工作,但其精度相对较低,通常在几百米到几公里之间。在网络定位中,...