常用网络开源库的特点与简单用法

1,146 阅读4分钟
原文链接: blog.csdn.net

今天来总结一下常用网络开源库的特点与简单用法。

AsyncHttp
Asynchttp 基于Apache HttpClient库;

  • 特点:
    1.异步网络请求,在匿名回调中处理响应,使用简单
    2.使用线程池来管理并发的网络请求
    3.永久的cookie保存,内部实现用的是Android的SharedPreferences
    4.库很小,所有的一切只有60kb
    5.自动智能的请求重连
    6.内置Json解析

  • 用法:

        AsyncHttpClient client = new AsyncHttpClient();
        //永久保存cookie
        PersistentCookieStore myCookieStore = new PersistentCookieStore(this);
        client.setCookieStore(myCookieStore);

        client.get(getAbsoluteUrl(url), params, responseHandler);
        client.post(getAbsoluteUrl(url), params, responseHandler);

    private AsyncHttpResponseHandler mHandler = new AsyncHttpResponseHandler() {

        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBytes) {


        }

        @Override
        public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) {

        }
    };  

Volley
Volley,谷歌在android2.2之后不建议使用Http Client,Volley在android2.2及以下版本使用Http Client,而android2.3
及以上版本使用HttpUrlConnection,它是android开发团队在2013年推出的,大小大概153KB;

  • 特点:
    1.特别适合数据量小,通信频繁的网络操作,异步网络请求
    2.支持使用okhttp作为传输层
    3.扩展性强。Volley 中大多是基于接口的设计,可配置性强
    4.提供简便的图片加载工具
    5.访问网络数据时直接开启固定个数线程访问网络
    6.不支持 post 大数据,所以不适合上传文件
    用法:
//创建一个RequestQueue对象。
        RequestQueue mQueue = Volley.newRequestQueue(context);
        //创建一个Request对象。
        StringRequest stringRequest = new StringRequest(Method.POST, url, listener, errorListener) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                return params;
            }
        };
        //设置请求时间
        stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 1, 1.0f));
        //将Request对象添加到RequestQueue里面。
        mQueue.add(stringRequest);
        }
        {
        加载图片只需把StringRequest改为ImageRequest ,然后设置一些图片宽高 图片scaleType属性等参数
         }
         {
         使用ImageLoader可以实现对图片的缓存
          RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
        String url = "https://www.baidu.com/img/bdlogo.png";
        ImageLoader loader=new ImageLoader(queue,new BitmapCache() );
        // 第一个参数指定用于显示图片的ImageView控件
        // 第二个参数指定加载图片的过程中显示的图片
        // 第三个参数指定加载图片失败的情况下显示的图片
        ImageLoader.ImageListener listener=ImageLoader.getImageListener(iv,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
        // 调用ImageLoader的get()方法来加载图片
        // 第一个参数就是图片的URL地址
        // 第二个参数则是刚刚获取到的ImageListener对象
        // 如果想对图片的大小进行限制,也可以使用get()方法的重载,指定图片允许的最大宽度和高度,即通过第三第四个参数指定
        loader.get(url,listener);

XUtils
XUtils 一个 Android 公共库框架,主要包括四个部分:View,Db, Http, Bitmap 四个模块,大小900KB左右;

    • View 模块主要的功能是通过注解绑定 UI,资源,事件。
    • Db 模块是一个数据库 orm 框架, 简单的语句就能进行数据的操作。
    • Http 模块主要访问网络,支持同步,异步方式的请求,支持文件的下载。
    • Bitmap 模块是加载图片以及图片的处理, 支持加载本地,网络图片。而且支持图片的内存和本地缓存。
  • 特点:
    1.通过HTTPclient请求网络,bitmap模块通过urlhttpconnection
    2.支持大数据的请求,速度比volley稍快,扩展性低
    3.通过开启线程池来管理线程

用法:

//get请求
            HttpUtils util = new HttpUtils();
        util.send(HttpRequest.HttpMethod.GET, "http://www.baidu.com", new RequestCallBack<Sting>() {

            @Override
            public void onSuccess(ResponseInfo<Sting> responseInfo) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onFailure(HttpException error, String msg) {
                // TODO Auto-generated method stub

            }

        });
        //post请求:
        HttpUtils httpUtils = new HttpUtils();
        RequestParams params = new RequestParams();
        params.addBodyParameter("CODE", "31");
        httpUtils.send(HttpMethod.POST, Constants.URL_HOST, params, new RequestCallBack<String>() {

            @Override
            public void onFailure(HttpException arg0, String arg1) {
            }

            @Override
            public void onSuccess(ResponseInfo<String> arg0) {
                }
            }
        });

Okhttp
Okhttp 是一个 Java 的 HTTP+SPDY(SPDY是基于TCP的应用层协议,用以最小化网络延迟,提升网络速度) 客户端开发包,同时也支持 Android。需要Android 2.3以上。

  • 特点:
    1.是安卓版http客户端,非常高效,支持SDPY,GZIP和HTTP缓存
    2.自动处理常见的网络问题,比如二次连接,SSL握手问题。
    3.从4.4开始httpurlconnection的底层实现采用的是okhttp
    4.支持json,通过回调进行异步操作
    5. 基于 NIO (非阻塞式读取数据)和 Okio(基于 IO 和 NIO 基础上做的一个更简单、高效处理数据流的一个库)

用法:

//新建一个okhttpclient对象
         OkHttpClient client = new OkHttpClient();
         //通过Request.Builder方法新建一个request对象
         Request request = new Request.Builder()
                .url(url)
                .build();
        Response response = null;
        try {
        //调用request的newCall方法得到响应结果
            response = client.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;

Retrofit
Retrofit 支持同步和异步两种方式,在使用时,需要将请求地址转换为接口,通过注解来指定请求方法,请求参数,请求头,返回值等信息;
Retrofit+okhttp+rxjava是现在常用的请求形式

  • 特点:
    1.性能最好,处理最快,速度上比volley更快
    2.传输层默认使用okhttp
    3.默认使用Gson

    用法:


        //首先完成请求所用的service,是一个interface,完全通过注解完成配置
        public interface GitHubService {
            @GET("users/{user}/repos")
             Call<List<Repo>> listRepos(@Path("user") String user);
        }
        //创建Retrofit实例
        Retrofit retrofit = new Retrofit.Builder()
                  .baseUrl("https://api.github.com/")
                  .build();
        //得到GitHubService对象
        GitHubService service = retrofit.create(GitHubService.class);
        //调用接口方法
        Call<List<Repo>> repos = service.listRepos("octocat");