android中网络操作使用总结(http)
Android是作为智能手机的操作系统,我们开发的应用,大多数也都须要连接网络,通过网络发送数据、获取数据,因此作为一个应用开发人员必须熟悉怎么进行网络訪问与连接。通常android中进行网络连接通常是使用scoket或者http,http是最多的情况,这里,我来总结下,怎么进行http网络訪问操作。
android是採用java语言进行开发的,android的包中包括java的URLConnection和apache 的httpclient,因此我们能够使用这两个工具进行网络连接和操作。同一时候,为了控制是否同意程序连接网络,我们开发应用时,须要在Manifest文件里配置申请网络连接的权限,代码例如以下。
<uses-permission android:name="android.permission.INTERNET"/>
使用URLConnection连接网络
URLConnection为java.net包中提供的网络訪问,支持http,https,ftp等,进行http连接时,使用HttpURLConnection就可以,演示样例代码例如以下:
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in); //该方法是我们自己写的,从流中取数据保存到本地,实现从网络获取数据。
finally {
urlConnection.disconnect();
}
向server提交数据时,须要採用POST传输
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setDoOutput(true); //设置能够上传数据
urlConnection.setChunkedStreamingMode(0);
OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
writeStream(out); //该方法时我们自己写的,向输出流中写数据,实现数据上传。
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
finally {
urlConnection.disconnect();
}
很多其它用法和函数请查看:http://developer.android.com/reference/java/net/HttpURLConnection.html
同一时候HttpsURLConnection的用法请查看:http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
使用HttpClient
这个呢,我们也能够使用AndroidHttpClient页能够使用apache默认的DeafultHttpClient,两者之间只常见Client不同,其它都一样
创建AndroidHttpClient
AndroidHttpClient httpClient = AndroidHttpClient.newInstance("user-agent");
创建DefaultHttpClient
HttpClient client = new DefaultHttpClient();
GET请求
HttpGet getRequest = new HttpGet("http://blog.isming.me");
try {
HttpResponse response = httpClient.execute(getMethod); //发起GET请求
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8"));//获取server响应内容
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
发起POST请求:
//先将要传的数据放入List
params = new LinkedList<BasicNameValuePair>();
params.add(new BasicNameValuePair("param1", "Post方法"));
params.add(new BasicNameValuePair("param2", "第二个參数"));
try {
HttpPost postMethod = new HttpPost(baseUrl);
postMethod.setEntity(new UrlEncodedFormEntity(params, "utf-8")); //将參数填入POST Entity中
HttpResponse response = httpClient.execute(postMethod); //运行POST方法
Log.i(TAG, "resCode = " + response.getStatusLine().getStatusCode()); //获取响应码
Log.i(TAG, "result = " + EntityUtils.toString(response.getEntity(), "utf-8")); //获取响应内容
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
说明
从上面看到,使用HttpClient更加方便,明了。只是Android官方给我们的文档说明是建议android2.2及下面版本号建议使用HttpClient,android2.3及以上版本号建议使用HttpURLConnection。
原因是HttpURLConnection时一个轻量级的Httpclient,提供的API比較简单,方便扩展,可是在2.2及曾经版本号中,这个API存在一些bug,在2.3的版本号中,给改动了。
而HttpClient尽管稳定,bug少,可是其提供的API非常多,进行升级和扩展不方便,android团队在提升和优化其方面的积极性不高。
因此,在Android2.2版本号曾经,使用HttpClient时最好的选择。
Android2.3版本号及以后,使用HttpURLConnection时最佳选择。
框架
网络连接是耗时的操作,通常我们不会将其放在UI线程操作,会编写异步线程,将其放在后台线程运行(异步线程操作看这里)。
而网上有一些线程的网络操作框架,能够降低我们的工作量,同一时候我们自己写的好,可能非常多异常处理之类的,没有其向的更加全面。
有轻量的android-async-http
谷歌官方的volley
Square提供的Retrofit
这个能够依据自己项目的须要选择不同的框架,有空我来写写volley的使用(PS:网上已经有用法了,自己百度去),另外两个我的连接中已经有用法了。
ok,完毕!
写的东西不少,可是介绍的不够具体。假设不清楚的,欢迎与我交流
原文地址:http://blog.isming.me/blog/2014/05/11/use-network-in-android/,欢迎转载,转载请注明出处!
android中网络操作使用总结(http)的更多相关文章
- android之网络操作(1)
一.网络操作 在网络操作中JAVA已经为我提供了一套API用来进行网络操作,在android开发中我们仍可以这套API来做开发.下面通过一个简单的例子来了解一下android下的网络操作. 点击图中下 ...
- Android中网络流量控制(防火墙)——Iptables
Iptables简单介绍 iptables是与最新的 2.6.x 版本号 Linux 内核集成的 IP 信息包过滤系统. 假设 Linux 系统连接到因特网或 LAN.server或连接 LAN 和因 ...
- android中文件操作的四种枚举
1.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用自身访问,在该模式下,写入的的内容会覆盖原文件中的内容. 2.MODE_APPEND:该模式会检查文件是否存在,存在就往文件 ...
- android中代码操作外部SD卡出错:W/System.err(1595): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
AndroidManifest.xml 中加上: <uses-permission android:name="android.permission.WRITE_EXTERNAL_ST ...
- Android中的异步网络请求
本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关姿势.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家:) 1. 同步网络 ...
- android中的数据库操作
如何在android中调用数据库资源 在android中主要有两种方法来实现对数据库的访问,一种是adb shell方式,另一种是通过相关的android 的java类来间接的对数据库来进行操作.其中 ...
- android中的数据库操作(转)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- android中 检查网络连接状态的变化,无网络时跳转到设置界面
1:在AndroidManifest.xml中加一个声明 <receiver android:name="NetCheckReceiver"> <inten ...
- android中的数据库操作(SQLite)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
随机推荐
- Swift - 27 - 使用元组让函数返回多个值
//: Playground - noun: a place where people can play import UIKit // 定义一个数组 var userScores:[Int]? = ...
- 学习springMVC实例1——配置和跳转到HelloWorld
本文让大家迅速掌握springMVC的使用方法,以最简单的方式理解此框架 一.用eclipse新建一个web项目,命名为springMVC1,tomcat的端口号为9090 二.在WEB-INF目录下 ...
- Qt中widget重新setParent需要注意的问题
有时候需要在widget中重新setParent,但会发现setParent有时候会出现问题,比如子窗口不在刷出来等等. 其实,有一点是需要注意的,就是Qt文档里说的,如果你当前widget重新设置了 ...
- WireShark过滤语法
1.过 滤IP,如来源IP或者目标IP等于某个IP 例子:ip.src eq 192.168.1.107 or ip.dst eq 192.168.1.107或者ip.addr eq 192.168. ...
- git操作(强烈推荐)
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- Unix中$$、$@、$#、$*的意思
$$: 表示当前命令进程的PID $#: 表示参数的个数 $@ 和 $* : 都表示输出所有的参数 区别: $*:表示合并为一个参数 “$1 $2 $3 $n” $@:表示分解为多个参数 “$1” ...
- 实验一:C语言实现DES加解密算法
计算程序执行10万次需要的时间: 总共需要175秒 加解密一次的时间小于:0.00175秒 纯计算加解密的时间会更短 去除IO操作后的时间 也就是说加解密一次的时间为0.07毫秒 /*-------- ...
- struts2整合spring的思路
struts2整合spring有有两种策略: >sping容器负责管理控制器Action,并利用依赖注入为控制器注入业务逻辑组件. >利用spring的自动装配,Action将自动会从Sp ...
- BestCoder Round #49
呵呵哒,1001的dfs返回值写错,wa了两发就没分了,1002显然是PAM可是我没学过啊!!!压位暴力可不可以...看看范围貌似不行,弃疗...1003根本不会做,1004想了想lcc发现不可做,那 ...
- 【转】android MSM8974 上DeviceTree简介----不错
原文网址:http://blog.csdn.net/dongwuming/article/details/12784213 简介 主要功能是不在代码中硬编码设备信息,而是用专门的文件来描述.整个系统的 ...