Android常用网络框架小结

原生网络请求HttpUrlConnection

它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。

用法
  1. 首先我们需要获取到一个HttpURLConnection实例,一般需要new出一个URL对象,并传入目标网络地址,通过调用openConnection()方法获得HttpURLConnection实例。
  2. 得到该实例后。我们需要设置一下http请求的的方法,这里我们主要研究get和post,默认是使用get方法。get一般用于从服务器获取数据,post一般用于向服务器提交数据,设置请求方法使用函数setRequestMethod(“POST”)进行设置。
  3. 此外可以进行一些请求的限制,比如连接超时的时间等,可以通过setConnectTimeout设置超时时间。
  4. 获取服务器返回的输入流,使用getInputStream方法获取。
  5. 读取内容并处理
  6. 关闭连接,通过调用disconnect方法关闭当前的连接。
    使用过程中不要忘记添加权限
<uses-permission android:name="android.permission.INTERNET"/>

防止网络请求卡死:

  • 调用connection.disconnect();并置空对象
  • 设置请求超时时间

GET请求实现

public String get(String urlPath) {
        HttpURLConnection connection = null;
        InputStream is = null;
        try {
            URL url = new URL(urlPath);
            //获得URL对象
            connection = (HttpURLConnection) url.openConnection();
            //获得HttpURLConnection对象
            connection.setRequestMethod("GET");
            // 默认为GET
            connection.setUseCaches(false);
            //不使用缓存
            connection.setConnectTimeout(10000);
            //设置超时时间
            connection.setReadTimeout(10000);
            //设置读取超时时间
            connection.setDoInput(true);
            //设置是否从httpUrlConnection读入,默认情况下是true;
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                //相应码是否为200
                is = connection.getInputStream();
                //获得输入流
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                //包装字节流为字符流
                StringBuilder response = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                return response.toString();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
                connection = null;
            }
            if (is != null) {
                try {
                    is.close();
                    is = null;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

一、Volley

Volley是google官方2013年I/O大会推出的一套小而巧的异步请求库,该框架封装的扩展性很强,支持HttpClient、HttpUrlConnection,甚至支持OkHttp。

优点:

  • 适合数据量小而频繁的请求,通常情况下是要结合其他框架一起来使用, 比如volley+okhttp.

  • 扩展性强,可二次封装

  • 和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)

缺点:

下载大文件性能不佳, 不支持大文件上传

GET请求

private void get(){
        RequestQueue queue= Volley.newRequestQueue(getApplicationContext());
        String url="http://121.41.119.107/test/index.php";
        StringRequest request=new StringRequest(url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.d("TAG",response);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        queue.add(request);
    }

二、OkHttp

优点:

  • 支持SPDY,共享同一个Socket来处理同一个服务器的所有请求
  • 无缝的支持GZIP来减少数据流量
  • 如果服务器端有多个IP地址,当第一个地址连接失败时,OkHttp会尝试连接其他地址

关闭请求:调用call.cancel()取消请求

GET请求

private String get(String url) {
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = null;
        try {
            response = client.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

三、Retrofit

Retrofit是Square公司出品的默认基于OkHttp封装的一套RESTful网络请求框架,RESTful可以说是目前流行的一套api设计的风格,并不是标准。Retrofit的封装可以说是很强大,里面涉及到一堆的设计模式,可以使用不同的http客户端,虽然默认是用http,可以使用不同Json Coonverter来序列化数据,同时提供对RxJava的支持,使用Retrofit+OkHttp+RxJava+Dagger2可以说是现在比较潮的框架,但相对来说门槛比较高。

注意: 使用Retrofit的前提是服务器端代码遵循RESTful规范 !!!!!

关闭请求: 调用call.cancel()取消请求

优点:

  • 效率非常高
  • 可以直接将结果转换称Java类
  • 主要是配合RxJava一起使用
  • 传输层默认就使用OkHttp

最大优点:请求响应时间相比volley和Okhttp都要快很多甚至少2倍时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值