zoukankan      html  css  js  c++  java
  • 别再使用单一框架了,XUtils——你值得拥有!

    XUtils使用详解

    一. XUtils是什么?

    简介

    xUtils 包含了orm, http(s), image, view注解, 但依然很轻量级(251K), 并且特性强大, 方便扩展.

    1. orm: 高效稳定的orm工具, 使得http接口实现时更方便的支持cookie和缓存.
      灵活的, 类似linq表达式的接口.和greenDao一致的性能.
    2. http(s): 基于UrlConnection, Android4.4以后底层为okHttp实现.
      请求协议支持11种谓词: GET,POST,PUT,PATCH,HEAD,MOVE,COPY,DELETE,OPTIONS,TRACE,CONNECT
      支持超大文件(超过2G)上传
      支持断点下载(如果服务端支持Range参数,客户端自动处理断点下载)
      支持cookie(实现了domain, path, expiry等特性)
      支持缓存(实现了Cache-Control, Last-Modified, ETag等特性, 缓存内容过多时使用过期时间+LRU双重机制清理)
      支持异步和同步(可结合RxJava使用)调用
    3. image: 有了http(s)及其下载缓存的支持, image模块的实现相当的简洁.
      支持内存缓存, 磁盘缓存(缩略图和原图), 并且支持回收被view持有, 但被MemCache移除的图片, 减少页面回退时的闪烁.
      支持在ListView滑动时, 自动停止被回收复用的item对应的下载任务(再次下载时断点续传)
      支持webp, gif(部分比较老的系统只展示静态图)
      支持圆角, 圆形, 方形等裁剪, 支持自动旋转…
    4. view注解: view注解模块仅仅400多行代码却灵活的支持了各种View注入和事件绑定.
      事件注解支持且不受混淆影响…(参考sample的混淆配置)
      支持绑定拥有多个方法的listener

    使用前配置

    需要的权限

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 可选 -->
    初始化
    // 在application的onCreate中初始化
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(BuildConfig.DEBUG); // 是否输出debug日志, 开启debug会影响性能.
        ...
    }
    AndroidManifest.xml文件application 节点里添加
    android:requestLegacyExternalStorage="true"
    android:usesCleartextTraffic="true"

    在使用注解的地方需要绑定

    x.view().inject(this);//没有用到view注解可以先不用

    二.XUtils加载图片

    ImageOption

    ImageOption是xutils中的一个类,我们在加载图片时如果对加载的图片做一些处理,比如设置大小和圆角,可以通过ImageOption来进行处理。

    private  ImageOptions getImageOptions(){
            ImageOptions imageOptions = new ImageOptions.Builder()
                    .setSize(DensityUtil.dip2px(120), DensityUtil.dip2px(120))//设置大小
                    .setRadius(DensityUtil.dip2px(30))//设置圆角半径
                    .setCrop(true)//如果ImageView的大小不是定义为wrap_content, 不要crop
                    .setImageScaleType(ImageView.ScaleType.CENTER_CROP)
                    .setLoadingDrawableId(R.drawable.ic_launcher_background)//加载中显示
                    .setFailureDrawableId(R.drawable.ic_launcher_foreground)//失败时显示
                    .build();
                    //建造者设计模式
            return imageOptions;
        }

    加载网络图片

    1.简单加载

    imageOptions = getImageOptions();
    x.image().bind(imageView, "https://cdn.xiaoz.me/wp-content/uploads/2018/12/shibie_600.jpg");

    2.带有回调的加载

    imageOptions = getImageOptions();
                    x.image().bind(imageView, "https://img0.utuku.china.com/640x0/news/20200517/734aa0ad-2843-4073-b370-f168fd56bc38.jpg", new Callback.CommonCallback<Drawable>() {
                        @Override
                        public void onSuccess(Drawable result) {
                            showToast("图片加载成功");
                        }
    
                        @Override
                        public void onError(Throwable ex, boolean isOnCallback) {
                            showToast("网址错误");
                        }
    
                        @Override
                        public void onCancelled(CancelledException cex) {
                            showToast("图片加载取消");
                        }
    
                        @Override
                        public void onFinished() {
                            showToast("图片加载结束");
                        }
                    });

    3.带有缓存回调的图片加载

    x.image().bind(imageView, "https://img0.utuku.china.com/640x0/news/20200517/734aa0ad-2843-4073-b370-f168fd56bc38.jpg", new Callback.CacheCallback<Drawable>() {
                        @Override
                        public boolean onCache(Drawable result) {
                            return true;
                        }
    
                        @Override
                        public void onSuccess(Drawable result) {
                            showToast("图片加载成功");
                        }
    
                        @Override
                        public void onError(Throwable ex, boolean isOnCallback) {
                            showToast("网址错误");
                        }
    
                        @Override
                        public void onCancelled(CancelledException cex) {
                            showToast("图片加载取消");
                        }
    
                        @Override
                        public void onFinished() {
                            showToast("图片加载结束");
                        }
                    });

    加载Android资源图片

    1.加载assert目录下的资源

    x.image().bind(imageView, "assets://test.gif", imageOptions);

    2.加载res/drawable目录下资源

    x.image().bind(imageView, "res://"+R.drawable.test);

    加载sd卡图片

    加载sd卡图片

    x.image().bind(imageView, "file:///sdcard/Pictures/pic/photo.png");

    三.XUtils请求网络

    RequestParams

    RequestParam同样是xutils中的一个类,我们可以在构造函数中传入url

    RequestParams params = new RequestParams("http://xxxx:8080/user/login");

    如果需要携带参数,可以通过下列方式添加

    params.addBodyParameter("userAccount", "1001");
       params.addBodyParameter("userPwd", "123456");

    get请求

    x.http().get(params, new Callback.CacheCallback<String>() {.....})

    post请求

    同步请求(阻塞主线程,不建议使用)

    x.http().postSync(params, String.class);

    异步请求

    RequestParams params = new RequestParams("http://1xxxx:8080/user/login");
                    params.addBodyParameter("userAccount", "1001");
                    params.addBodyParameter("userPwd", "123456");
                    x.http().post(params, new Callback.CommonCallback<String>() {
    
                        @Override
                        public void onSuccess(String result) {
                            Log.d("xutils", "success");
                            JSONObject json = JSON.parseObject(result);
                            if(json.getString("res").equals("success")){
                                showToast("登录成功");
                            }else{
                                showToast("登录失败");
                            }
                        }
                        @Override
                        public void onError(Throwable ex, boolean isOnCallback) {
                            showToast("网址错误或者网络不可用");
                        }
    
                        @Override
                        public void onCancelled(CancelledException cex) {
                            showToast("登录被取消");
                        }
    
                        @Override
                        public void onFinished() {
                            Log.d("xutils", "finish");
                            showToast("OnFinish最后被回调");
                        }
                    });

    四.使用总结

    个人使用感受:Xutils使用方便,集合了几种框架于一体,至少结合了Okhttp + Glide + ButterKnife+GreenDAO.是一款非常不错的框架,强推。Xutils的源码也写的比较容易看懂,建议大家阅读。

    相关阅读:

    小投资创业项目

    绪川里绪

    都丸纱也华

  • 相关阅读:
    HDU 3436 Queuejumpers
    POJ 3580 SuperMemo
    HDU 2871 Memory Control
    Android 实现显示文字的Gallery
    Android 使用地图
    Android 深入的研究一下蓝牙
    手机录制视频demo
    用android来实现图片的绘制以及旋转缩放案例分析
    TextView 自动滚动(跑马灯)
    Android腾讯微博客户端开发一:在下方的Tab的实现
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13309119.html
Copyright © 2011-2022 走看看