翻译之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)和一个响应缓存。
这个API是当前相当健壮的。例如:检索
www.vogella.com这个网页你可以采用下面这段代码:

<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




0 0
原创粉丝点击