zoukankan      html  css  js  c++  java
  • 15.常用网络开源库的特点与简单用法(转)

    转载:http://blog.csdn.net/lin_t_s/article/details/61199986

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

    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");
    
  • 相关阅读:
    leetcode 13. Roman to Integer
    python 判断是否为有效域名
    leetcode 169. Majority Element
    leetcode 733. Flood Fill
    最大信息系数——检测变量之间非线性相关性
    leetcode 453. Minimum Moves to Equal Array Elements
    leetcode 492. Construct the Rectangle
    leetcode 598. Range Addition II
    leetcode 349. Intersection of Two Arrays
    leetcode 171. Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/benchao/p/7656998.html
Copyright © 2011-2022 走看看