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

向服务器提交数据时,需要采用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/,欢迎转载,转载请注明出处!

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

时间: 2024-10-07 14:09:54

android中网络操作使用总结(http)的相关文章

Android中网络编程以及与服务器上Web项目的基础交互

该博文中内容通过老师上课的内容对于Android下的网络通信编程等内容进行总结: 1.Android网络编程初识 2.Android实现HTML源码查看 3.Android实现网络图片查看 4.Android实现与服务器上JavaWeb项目交互 1.Android网络编程初识 Android手机终端作为客户端发送Http请求到终端服务器上,并且当发送请求到服务器,如果请求成功,响应码:200:服务器会通过客户端返回请求并且处理后的信息数据,一般情况下,在正式项目中多用JSON,不会使用没有规定格

Android中网络框架的简单封装

个人博客 http://www.milovetingting.cn Android中网络框架的简单封装 前言 Android作为一款主要应用在移动终端的操作系统,访问网络是必不可少的功能.访问网络,最基本的接口有:HttpUrlConnection,HttpClient,而在后续的发展中,出现了Volley,OkHttp,Retrofit等网络封装库.由于各种原因,在实际的项目开发中,我们可能会需要在项目的版本迭代中,切换网络框架.如果对于网络框架没有好的封装,那么当需要切换网络框架时,可能就会

android之网络操作(1)

一.网络操作 在网络操作中JAVA已经为我提供了一套API用来进行网络操作,在android开发中我们仍可以这套API来做开发.下面通过一个简单的例子来了解一下android下的网络操作. 点击图中下载按钮从服务器上下载一张图片下来 二.xml布局文件 布局文件采用线性布局,只使用到一个button和一个image <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=

android中网络请求数据,解析并添加到Listview中

今天我实现了网络请求数据,解析并将数据添加到Listview中.上个星期我有提到说要实现点击Listview中item实现不同的功能,还是没头绪.如有幸被阅读,希望指教一下.我用的是hTTPClient的post方法请求的数据.在实现请求之前,还有一个主activity跳转.代码如下: 请求activity代码: public class MachineInterface extends Activity { private ListView machineType; private Array

Android中网络流量控制(防火墙)——Iptables

Iptables简介 iptables是与最新的 2.6.x 版本 Linux 内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置. Iptables工作原理 netfilter/iptablesIP 信息包过滤系统是一种功能强大的工具, 可用于添加.编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则.这些规则存储在专用的信

关于Android中内容操作数据库失败的原因及修改方法

最近学习Android开发,在Android Studio编写SQL语句. 很熟悉的一点是,在Android Studio中写SQL语句的增删改查都是写在引号(" ")中的,因此在单词拼写错误的情况下,软件不会提示有错误,最近总结出了几点学习方法. 1.从Android Studio中导出所创建的数据库 在File Explorer下选择data文件夹,单击一下,在点击第二个data,在第二个data中寻找你所创建的文件夹 选择database文件下你所创建的数据库,然后导出到你的桌面

Android中删除照片操作

============问题描述============ 我在imageView中已经显示了图片,如何实现删除这张照片 ============解决方案1============ 如果你说的删除只是不显示,那么就让imageView不显示获取显示其他的就行. 如果是删除保存路径下的图片,那么找到指定文件删除就是.

android中的网络解析xml,json,html框架

android中网络请求回来数据之后,我们要对其解析.请求的返回的结果格式如果不是自定义协议:那么返回的数据通常是xml,json,html形式的数据了. 下面就是针对上面3种格式进行解析. xml解析使用工具:在android中推荐使用pull解析,还有其他的dom,sax解析. json解析使用工具:推荐使用Fastjson,由阿里提供.还有其他的如JackSon,Gson解析. html解析使用工具:推荐使用Jsoup,还有其他的如HtmlParser;关于使用这个,网络上的爬虫就是这样子

网络操作不能直接写在主线程中 以及 为什么不能在子线程中更新UI控件的属性

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //注意: 所有网络操作不能直接写在主线程中 因为所有的网络操作都是耗时的,如果加载到主线程中,会导致与用户的交互出现问题 ,所以要加载到子线程中 // [self loadImage]; [self performSelectorInBackground:@selector(loadImage) withObject:nil]; } //加