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");
    
  • 相关阅读:
    python学习笔记 class
    工作随谈之扯淡
    性能测试你了解多少?
    SVN常见问题汇总
    使用appium做自动化测试时,send_keyss只能输入字母数字,无法输入中文
    python+appium-desktop:安卓(android)7.0以上使用appium无法定位元素(无法refresh)且 无法运行脚本
    JMeter处理返回结果unicode转码为中文
    国内手机号段汇总(全)-2018-09
    Python : *args和**kwargs是什么东东呢?
    selenium 3.0变化
  • 原文地址:https://www.cnblogs.com/benchao/p/7656998.html
Copyright © 2011-2022 走看看