Android请求网络有三种方式:HttpURLConnection、 HttpClient和OkHttpClient

大多数连接网络的 Android app 会使用 HTTP 来发送与接收数据。Android 提供了三种 HTTP client:HttpURLConnection、 HttpClient和OkHttpClient。都支持 HTTPS、流媒体上传和下载、可配置的超时、IPv6 与连接池(connection pooling)。

    一、Java.net包中的HttpURLConnection类

    HttpUrlConnection是JDK里提供的联网API,我们知道Android SDK是基于Java的,所以当然优先考虑HttpUrlConnection这种最原始最基本的API,其实大多数开源的联网框架基本上也是基于JDK的HttpUrlConnection进行的封装罢了

   

二、HttpClient ,目前Android库已弃用

 

    三、 OkHttpClient

    http是现在主流应用使用的网络请求方式, 用来交换数据和内容, 有效的使用HTTP可以使你的APP变的更快和减少流量的使用。

    OkHttpClient是一个很棒HTTP客户端:

        支持SPDY,可以合并多个到同一个主机的请求

        使用连接池技术减少请求的延迟(如果SPDY是可用的话)

        使用GZIP压缩减少传输的数据量

        缓存响应避免重复的网络请求

    当你的网络出现拥挤的时候,就是OKHttp大显身手的时候,它可以避免常见的网络问题,如果你的服务是部署在不同的IP上面的,如果第一个连接失败,OkHTtp会尝试其他的连接。这对现在IPv4+IPv6中常见的把服务冗余部署在不同的数据中心上也是很有必要的。OkHttpClient将使用现在TLS特性(SNI ALPN)来初始化新的连接,如果握手失败,将切换到TLS 1.0。

    使用OkHttpClient很容易,同时支持异步阻塞请求和回调.

    如果你使用OkHttpClient,你不用重写你的代码, okhttp-urlconnection模块实现了 java.net.HttpURLConnection 中的API, okhttp-apache模块实现了HttpClient中的API

最近很火的Retrofit网络请求框架,内部封装也是OkHttpClient.

 

顺便说下OkHttpClient. POST请求传递参数的方法总结

1,使用FormBody传递键值对参数

这种方式用来上传String类型的键值对
使用示例如下:

    private void postDataWithParame() {
        OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。
        FormBody.Builder formBody = new FormBody.Builder();//创建表单请求体
        formBody.add("username","zhangsan");//传递键值对参数
        Request request = new Request.Builder()//创建Request 对象。
                .url("http://www.baidu.com")
                .post(formBody.build())//传递请求体
                .build();
        client.newCall(request).enqueue(new Callback() {。。。});//此处省略回调方法。
    }


2,使用RequestBody传递Json或File对象

RequestBody是抽象类,故不能直接使用,但是他有静态方法create,使用这个方法可以得到RequestBody对象。

这种方式可以上传Json对象或File对象。
上传json对象使用示例如下:

    OkHttpClient client = new OkHttpClient();//创建OkHttpClient对象。
* MediaType JSON = MediaType.parse("application/json; charset=utf-8");//数据类型为json格式,
* String jsonStr = "{\"username\":\"lisi\",\"nickname\":\"李四\"}";//json数据.
* RequestBody body = RequestBody.create(JSON, josnStr);
    Request request = new Request.Builder()
            .url("http://www.baidu.com")
            .post(body)
            .build();
    client.newCall(request).enqueue(new Callback() {。。。});//此处省略回调方法。


3.上传File对象使用示例如下:
MediaType fileType = MediaType.parse("File/*");//数据类型为json格式,
File file = new File("path");//file对象.
RequestBody body = RequestBody.create(fileType , file );

 

最后

欢迎加入我的Java与Android逆向开发交流QQ群,一起学习

Android请求网络有三种方式:HttpURLConnection、 HttpClient和OkHttpClient_第1张图片

 

你可能感兴趣的:(Android)