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)的更多相关文章

  1. android之网络操作(1)

    一.网络操作 在网络操作中JAVA已经为我提供了一套API用来进行网络操作,在android开发中我们仍可以这套API来做开发.下面通过一个简单的例子来了解一下android下的网络操作. 点击图中下 ...

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

    Iptables简单介绍 iptables是与最新的 2.6.x 版本号 Linux 内核集成的 IP 信息包过滤系统. 假设 Linux 系统连接到因特网或 LAN.server或连接 LAN 和因 ...

  3. android中文件操作的四种枚举

    1.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用自身访问,在该模式下,写入的的内容会覆盖原文件中的内容. 2.MODE_APPEND:该模式会检查文件是否存在,存在就往文件 ...

  4. 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 ...

  5. Android中的异步网络请求

    本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关姿势.由于个人水平有限,文中难免存在疏忽和谬误,希望大家可以指出,谢谢大家:) 1. 同步网络 ...

  6. android中的数据库操作

    如何在android中调用数据库资源 在android中主要有两种方法来实现对数据库的访问,一种是adb shell方式,另一种是通过相关的android 的java类来间接的对数据库来进行操作.其中 ...

  7. android中的数据库操作(转)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

  8. android中 检查网络连接状态的变化,无网络时跳转到设置界面

    1:在AndroidManifest.xml中加一个声明 <receiver android:name="NetCheckReceiver">    <inten ...

  9. android中的数据库操作(SQLite)

    android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库   an ...

随机推荐

  1. propertychange input change

    IE678 支持propertychange事件,可以监听所有属性(包括自定义属性)的改变事件,包括手动修改输入框文本以及js修改输入框文本. propertychange事件有个特点就是不支持冒泡, ...

  2. form表单中的label标签

    小伙伴们,你们在前面学习表单各种控件的时候,有没有发现一个标签--label,这一小节就来揭晓它的作用. label标签不会向用户呈现任何特殊效果,它的作用是为鼠标用户改进了可用性.如果你在 labe ...

  3. Asp.net IsPostBack

    Page.IsPostBack是一个标志:当前请求是否第一次打开.调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者this.Page.IsPos ...

  4. CSS 布局Float 【0】

    float是 css 样式的定位属性.我们在印刷排版中,文本可以按照需要围绕图片.一般把这种方式称为“文本环绕”.在网页设计中,应用了CSS的float属性的页面元素就像在印刷布局里面的被文字包围的图 ...

  5. 01.Net入门知识

    1..Net学习路线及几个容易混淆的概念 .Net只是一个平台,提供运行.Net程序需要的虚拟机.类库等 C#就是.Net平台下的一个开发语言,.Net下的语言还有VB.Net.PowerShell等 ...

  6. XML约束

    XML约束--能够看懂约束内容,根据约束内容写出符合规则的xml文件. DTD约束 1)导入dtd方式 内部导入 <!DOCTYPE note [ <!ELEMENT note (to,f ...

  7. 3 Longest Substring Without Repeating Characters(最长不重复连续子串Medium)

    题目意思:求字符串中,最长不重复连续子串 思路:使用hashmap,发现unordered_map会比map快,设置一个起始位置,计算长度时,去减起始位置的值 eg:a,b,c,d,e,c,b,a,e ...

  8. grails通过findBy或findBy查找的结果集进行排序

    原文:http://grails.org/doc/2.3.x/ref/Domain%20Classes/list.html list Purpose Lists instances of the do ...

  9. id 自增------删除数据后恢复到删除前自增id

    删除数据后,执行下面语句: ALTER TBALE TableName AUTO_INCREMENT=1 mysql删除比较 一.DROP drop  table tablename 绝招:删除内容和 ...

  10. UVA1152 4Values whose Sum is 0

    Description The SUM problem can be formulated as follows: given four lists A, B, C, D of integer val ...