翻译之Android Networking
来源:互联网 发布:影片剪辑软件下载 编辑:程序博客网 时间:2024/05/18 01:43
Android Networking
在翻译对一些知识点的理解还不到位的地方,希望不要见怪。
原文翻译自:http://www.vogella.com/tutorials/AndroidNetworking/article.html
Android中执行HTTP操作
这篇文章主要描述了在android如何通过HTTP获取web资源,主要针对Eclipse 4.4, Java 1.6 和 Android 5.0的开发环境。
1 android中http访问网络的概述
1.1可用的官方API
Android支持java标准的网络包java.net
,这个包用于访问网络的资源。在java.net包中实现HTTP网络接入的最基本的类是HttpURLConnection类。
Tip:android也支持Apache HttpClient函数库,但是这个函数库没有是不在被推荐使用的,Goole正在集中精力为提高HttpURLConnection类的实现为努力。
1.2权限要求
为了使你的应用可以接入internet,需要配置android.permission.INTERNET
权限
。
为了检测你的应用访问internet的状态,要求配置android.permission.ACCESS_NETWORK_STATE
权限。
1.3
开源的资源函数库
Android执行网络访问时笨重的。为了能够缓存和确保在在后台线程中可以执行网络操作,你需要打开和关闭连接。
为了简化这些操作,我们可以使用一些流行的开源的函数库。最流行的开源库是下面的:
· Volley
· OkHttp
2 基于android 访问网络的很好的练习
在android应用程序中你应该避免在一个用户接口里面执行耗时操作。包括读写文件和访问网络。
在android 3.0(Honeycomb)系统中如果用户调用访问网络的接口系统会抛出NetworkOnMainThreadException
的
崩溃异常。
在一个有效的android应用中执行访问网络的标准的方式是采用一个service。当一个activity或者一个fragment可能访问网络的时候,采用一个标准的service是最好的设计,因为这样在一个activity里面你的代码将会是简洁的。
Tip: 下面的代码片段是为了测试在主线程里你可以允许访问网络。这段代码片段需要在你的activity里面的onCreate()
方法里面的开始。
<span style="font-size:18px;">StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy(policy); </span>
3.用java实现http访问
Java提供了一个通用的,轻量级的Http clientAPI通过HTTP 或 HTTPS 协议访问网络资源。
接入网络的主类是java.net.URL
类和java.net.HttpURLConnection
类。
URL类用于定义当HttpURLConnection
类用于访问网络资源时的一个指向web资源的指向。
HttpURLConnection
类允许你创建一个InputStream对象。这样你就可以像处理本地文件一样调用InputStream对象并读取它。
在最新的版本里面HttpURLConnection
支持透明的响应压缩(通过头信息:Accept-Encoding: gzip,服务器名称指向,扩展的
SSL 和TLS)和一个响应缓存。
www.vogella.com这个网页你可以采用下面这段代码:
这个API是当前相当健壮的。例如:检索
<span style="font-size:18px;">try { URL url = new URL("http://www.vogella.com"); HttpURLConnection con = (HttpURLConnection) url .openConnection(); readStream(con.getInputStream()); } catch (Exception e) { e.printStackTrace();}private void readStream(InputStream in) { BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(in)); String line = ""; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } }} </span>
HttpURLConnection
类的
Javadoc文档建议不要重用HttpURLConnection
类。如果你重用了,那么HttpURLConnection将没有线程事件,从而它不会在两个不同的线程间被分享。
4.
检查网络是否可用
很明显android设备不是总是可以访问网络,你可以通过下面的代码段检查当前的网络的可用状态:
<span style="font-size:18px;">public boolean isNetworkAvailable() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = cm.getActiveNetworkInfo(); // if no network is available networkInfo will be null // otherwise check if we are connected if (networkInfo != null && networkInfo.isConnected()) { return true; } return false;} </span>
这个方法需要配置ACCESS_NETWORK_STATE
权限。
想到下面的一些信息大家在实际开发中可能用不到,所以暂不做翻译,望大家谅解,更多内容请查看原网址:
http://www.vogella.com/tutorials/AndroidNetworking/article.html
- 翻译之Android Networking
- Android 之SearchView翻译
- android之DDMS翻译
- React Native 之 Networking
- Android--(15),networking
- 【NDN基础】Networking Named Content 全文翻译
- Networking Named Content 全文翻译(转)
- 【NDN基础】Named Data Networking 全文翻译
- Android翻译之UI Testing
- Android文档翻译之loaders
- 翻译之Android XML Processing
- 翻译之JSON in Android
- Android API 翻译之 UsbDevice
- Android开发之百度翻译
- Android API翻译之WebViewClient
- NetWorking 之AFHTTPRequestOperationManager上传图像
- 初识Virtualbox之networking mode
- Networking
- 并行、并发、同步和互斥
- android之android.intent.category.DEFAULT的用途和使用
- 《Linux内核分析》(二)——从一个简单Linux内核分析进程切换原理
- mapreduce框架详解
- 电动汽车充能站
- 翻译之Android Networking
- org.apache.jasper.JasperException: /pages/path.jsp
- Weka连接oracle数据库
- 欢迎大家来到的
- nyoj 216 A problem is easy
- 3.2 Piecewise Linear Interpolation(网站)
- 快速乘法计算模幂
- 基于注解的返回通知、异常通知、环绕通知-佟刚老师《Spring4视频教程》学习笔记(19)
- 为活动统一设置无标题&&全屏