翻译之Android Networking

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值