文档章节

android中网络操作使用总结(http)

码农明明
 码农明明
发布于 2014/05/22 13:30
字数 1205
阅读 3018
收藏 96

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();
}

向服务器提交数据时,需要采用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"));//获取服务器响应内容  
} 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时一个轻量级的Http客户端,提供的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/,欢迎转载,转载请注明出处!

© 著作权归作者所有

共有 人打赏支持
码农明明
粉丝 75
博文 21
码字总数 23978
作品 1
黄浦
程序员
加载中

评论(6)

nevans
nevans
另一个好的选择是Netroid,基于Volley实现的http框架,详情可查看我的相关文章。
码农明明
码农明明

引用来自“土豆哪里挖的”的评论

引用来自“码农明明”的评论

引用来自“叫我小白”的评论

不是说httpURLConnection不稳定吗?在走wap代理网关模式下,很容易挂掉,做全国应用的时候,非常不建议使用这httpURLConnection,不知道是不是我的一个知识误区,请指教.

不是吧,使用什么网络那是手机决定的,和这个没关系,只是2.3以下版本的android中,这个有很多bug

谷歌推荐使用HttpURLConnection
是的,android2.3以后,谷歌推荐使用HttpURLConnection
Glide
Glide

引用来自“码农明明”的评论

引用来自“叫我小白”的评论

不是说httpURLConnection不稳定吗?在走wap代理网关模式下,很容易挂掉,做全国应用的时候,非常不建议使用这httpURLConnection,不知道是不是我的一个知识误区,请指教.

不是吧,使用什么网络那是手机决定的,和这个没关系,只是2.3以下版本的android中,这个有很多bug

谷歌推荐使用HttpURLConnection
码农明明
码农明明

引用来自“叫我小白”的评论

不是说httpURLConnection不稳定吗?在走wap代理网关模式下,很容易挂掉,做全国应用的时候,非常不建议使用这httpURLConnection,不知道是不是我的一个知识误区,请指教.

不是吧,使用什么网络那是手机决定的,和这个没关系,只是2.3以下版本的android中,这个有很多bug
黑白001
黑白001
不是说httpURLConnection不稳定吗?在走wap代理网关模式下,很容易挂掉,做全国应用的时候,非常不建议使用这httpURLConnection,不知道是不是我的一个知识误区,请指教.
guowei0502
guowei0502
学习了,谢谢分享
android-async-http源码剖析

本文主要内容 android-async-http用法 android-async-http主要流程 总结 1、android-async-http用法 android-async-http框架用于网络请求等,据说它已经不再维护,但个人感觉它还是很好用的,...

某昆
08/25
0
0
Android性能优化:手把手教你如何让App更快、更稳、更省(含内存、布局优化等)

前言 在 开发中,性能优化策略十分重要 因为其决定了应用程序的开发质量:可用性、流畅性、稳定性等,是提高用户留存率的关键 本文全面讲解性能优化中的所有知识,献上一份 性能优化的详细攻...

Carson_Ho
05/30
0
0
Android RxJava: 这是一份全面的 操作符 使用汇总 (含详细实例讲解)

前言 ,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 开发者的欢迎。 如果还不了解RxJava,请看文章:Android:这是一篇 清晰 & 易懂的Rxjava 入门教程 如此受欢迎的原...

Carson_Ho
05/31
0
0
Android之Handler用法总结

Android之Handler用法总结 方法一:(java习惯,在android平台开发时这样是不行的,因为它违背了单线程模型) 刚刚开始接触android线程编程的时候,习惯好像java一样,试图用下面的代码解决问...

crystaltiger
2013/08/11
0
0
如何在android模拟器中卸载和安装apk程序 如何获得google mapkey 常见操作

如何在android模拟器中卸载和安装apk程序 1、安装: adb install test.apk 如果报adb不是内部命令则切换到platform-tools下面,进行安装。 2、卸载: E:workstudyandroid-sdk-windowsplatfo...

南寒之星
2013/01/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sqlserver 2008 r2 直接下载地址(百度云)

之前下载的sqlserver2008发现不能附加,就卸载了,重新找到了sqlserver2008R2的百度云资源 卸载sqlserver2008还是有点麻烦,不过就是需要删除注册表中的信息 自己来回卸载了3次终于重装sqlse...

dillonxiao
33分钟前
1
0
[Java]JVM调优总结 -Xms -Xmx -Xmn -Xss

JVM调优总结 -Xms -Xmx -Xmn -Xss 博客分类: Java General JVM应用服务器电信CMS算法 堆大小设置 JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可...

morpheusWB
43分钟前
1
0
C++ std::function 和 std::bind

C++11提供了std::function和std::bind两个工具,用于引用可调用对象。这些可调用对象包括 普通函数,Lambda表达式,类的静态成员函数,非静态成员函数以及仿函数等。引用可调用对象,可以用于...

yepanl
今天
2
0
python:可迭代对象的索引

关于 python的range的用法: 注意是[ 开始,结束)的半开区间,不包括结束 http://www.runoob.com/python/python-func-range.html import collectionsfrom collections import Iterable字符串......

Oh_really
今天
3
0
docker-compose ,docker-stack

1.例子 version: "3"services: php: image: registry.cn-hangzhou.aliyuncs.com/lxepoo/apache-php5 ports: - "38080:80" networks: - my_php_mysql volum......

chenbaojun
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部