返回顶部
首页 > 资讯 > 后端开发 > Python >详解Matisse与Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load
  • 862
分享到

详解Matisse与Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load

2024-04-02 19:04:59 862人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

问题描述 在使用 Matisse 与 glide 4.0.0 以及 4.0.0 之后的版本过程中,发现通过 Matisse 的 wiki 代码调用选取图片的方式后,会出现本文标题

问题描述

在使用 Matisse 与 glide 4.0.0 以及 4.0.0 之后的版本过程中,发现通过
Matisse 的 wiki 代码调用选取图片的方式后,会出现本文标题的错误
1.以下为 wiki 调用代码:


Matisse.from(MainActivity.this)
        .choose(MimeType.allOf())
        .countable(true)
        .maxSelectable(9)
        .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
        .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
        .thumbnailScale(0.85f)
        .imageEngine(new GlideEngine())
        .forResult(REQUEST_CODE_CHOOSE);

2.以下为控制台报出的错误信息,内容过多,我就只截取了错误标题部分


java.lang.NoSuchMethodError: com.bumptech.glide.RequestManager.load
at com.zhihu.matisse.engine.impl.GlideEngine.loadThumbnail(GlideEngine.java:36)
at com.zhihu.matisse.internal.ui.widget.MediaGrid.setImage(MediaGrid.java:117)
at com.zhihu.matisse.internal.ui.widget.MediaGrid.bindMedia(MediaGrid.java:84)

问题定位

通过报错信息,可以发现出现错误的调用路径,根据路径依次查看,发现在类 GlideEngine.java中,出现如下代码:


    @Override
    public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
        Glide.with(context)
                .load(uri)
                .asBitmap()  // some .jpeg files are actually gif
                .placeholder(placeholder)
                .override(resize, resize)
                .centerCrop()
                .into(imageView);
    }

其中,有一行显示为红色,也就是说,该行代码出现错误,导致程序的崩溃。


.asBitmap()

问题分析

在问题定位中,发现 Matisse 在通过 Glide 调用相关 api 的时候出现错误,因此,问题主要原因出现在 Glide 的使用上。通过查看 Glide 的 相关文档,发现 Glide 从 v3 到 v4 做了一些改动。
在 相关文档 中发现


Glide.with(fragment)
    .asBitmap()
    .apply(myOptions)
    .load(url)
    .into(bitmapView);

仔细看这里的内容,这里 .asBitmap() 的调用是在 .load(url) 之前,而我们在 问题定位 中的代码, .asBitmap() 的调用是在 .load(url) 之后。随后我在测试中,调换了两者的位置,发现 .asBitmap() 在 .load(url)之前调用没有问题,而在 .load(url) 之后调用,的确出现了本文所描述的问题。

问题解决

到此,问题的原因已经很明确了。下面来谈谈问题的解决方式。

1.简单粗暴型的解决方式,将代码中的.imageEngine(new GlideEngine()) 替换成 .imageEngine(new PicassoEngine())(注:需要 Picasso 依赖)


Matisse.from(MainActivity.this)
        .choose(MimeType.allOf())
        .countable(true)
        .maxSelectable(9)
        .addFilter(new GifSizeFilter(320, 320, 5 * Filter.K * Filter.K))
        .gridExpectedSize(getResources().getDimensionPixelSize(R.dimen.grid_expected_size))
        .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
        .thumbnailScale(0.85f)
      //.imageEngine(new GlideEngine())
        .imageEngine(new PicassoEngine())
        .forResult(REQUEST_CODE_CHOOSE);

2.自定义类MyGlideEngine,仿照类 GlideEngine,重新实现 ImageEngine,具体实现如下(注:该类未进行封装,代码不优雅,各位可根据自己业务需求,进行相应的修改优化)


public class MyGlideEngine implements ImageEngine {

    @Override
    public void loadThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView, Uri uri) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(placeholder)//这里可自己添加占位图
                .error(R.drawable.error)//这里可自己添加出错图
                .override(resize, resize);
        Glide.with(context)
                .asBitmap()  // some .jpeg files are actually gif
                .load(uri)
                .apply(options)
                .into(imageView);
    }

    @Override
    public void loadGifThumbnail(Context context, int resize, Drawable placeholder, ImageView imageView,
                                 Uri uri) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .placeholder(placeholder)//这里可自己添加占位图
                .error(R.drawable.error)//这里可自己添加出错图
                .override(resize, resize);
        Glide.with(context)
                .asBitmap()
                .load(uri)
                .apply(options)
                .into(imageView);
    }

    @Override
    public void loadImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .override(resizeX, resizeY)
                .priority(Priority.HIGH);
        Glide.with(context)
                .load(uri)
                .apply(options)
                .into(imageView);
    }

    @Override
    public void loadGifImage(Context context, int resizeX, int resizeY, ImageView imageView, Uri uri) {
        RequestOptions options = new RequestOptions()
                .centerCrop()
                .override(resizeX, resizeY)
                .priority(Priority.HIGH);
        Glide.with(context)
                .asGif()
                .load(uri)
                .apply(options)
                .into(imageView);
    }

    @Override
    public boolean supportAnimatedGif() {
        return true;
    }

}

自定义类写好后,将 .imageEngine(new GlideEngine()) 修改成 .imageEngine(new MyGlideEngine ()),然后运行项目,查看能否正常使用。

总结

由于 Matisse 很久未更新维护,所以在 Glide 升级后,会出现这种问题。希望 Matisse 贡献者在接下来的维护中,修复这个问题。
本方案在我目前的项目中可正常使用,如果各位没有解决问题,还请勿喷。

到此这篇关于详解Matisse与Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load的文章就介绍到这了,更多相关详解Matisse与Glide内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Matisse与Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load

本文链接: https://lsjlt.com/news/132981.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Matisse与Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load
    问题描述 在使用 Matisse 与 glide 4.0.0 以及 4.0.0 之后的版本过程中,发现通过 Matisse 的 wiki 代码调用选取图片的方式后,会出现本文标题...
    99+
    2024-04-02
  • 详解Android GLide图片加载常用几种方法
    目录缓存浅析GLide图片加载方法图片加载周期图片格式(Bitmap,Gif)缓存集成网络框架权限占位符淡入效果变换启动页/广告页banner固定宽高圆角圆形总结缓存浅析 为啥要做缓...
    99+
    2022-11-16
    Android GLide图片加载 Android GLide
  • 如何解决Android中Glide与CircleImageView加载圆形图片的问题
    这篇文章将为大家详细讲解有关如何解决Android中Glide与CircleImageView加载圆形图片的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. 不使用占位符注释掉这两句代码即可。.pl...
    99+
    2023-05-30
    glide
  • Android入门之Glide显示网络图片高版本的使用详解
    目录开篇项目整体情况Nginx中hosting物理小图片存储目录Nginx配置Glide组件使用gradle文件中的依赖MyAppGlideModule.java开篇 一旦我们进入了...
    99+
    2023-02-06
    Android Glide显示网络图片 Android Glide显示图片 Android Glide
  • CHAR与VARCHAR详解
    前言:  前面写过一篇介绍int类型的文章,一直想写一篇介绍字符串字段类型的文章,一直拖着也没思路要怎么下手。最近多关注了下这方面的文章,决定还是把拖了好久的文章了结了吧。本篇文章主要会介绍字符串类型cha...
    99+
    2024-04-02
  • sysctl与/proc详解
    目录一、sysctl简介二、sysctl命令使用三、sysctl配置文件/etc/sysctl.conf详解四、/proc目录简介五、/proc/sys下内核文件与配置文件sysctl.conf中变量的对应...
    99+
    2024-04-02
  • SurfaceView 与 TextureView 详解
    前言 播放视频或者渲染其他的动画的时候,有两个 View 组件可供选择,SurfaceView 和 TextureView,GLSurfaceView 是 SurfaceView 的子类,在 Surf...
    99+
    2023-08-31
    1024程序员节 android 音视频 面试
  • Mongodb详解与安装
    NOSQL的数据存储模型键值模型:(key-avalue存储)优点:查找速度快缺点:数据无结构,通常只被当作字符串或二进制数据应用场景:内容缓存实例:Redis,Dynamo列式模型数据模型:数据按列存储,...
    99+
    2024-04-02
  • Java Stack与Queue详解
    目录一、Stack二、Queue一、Stack 示例: package StackPack; import java.util.Stack; public class Sta...
    99+
    2024-04-02
  • ListPreference详解与使用
    ListPreference是Android中的一个Preference子类,用于显示一个可选择的列表,并且可以保存用户所选择的值。...
    99+
    2023-09-14
    使用
  • java 中Comparable与Comparator详解与比较
    java 中Comparable与Comparator详解今天查看TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Co...
    99+
    2023-05-31
    java comparable comparator
  • Android adb说明与详解
    Android adb 说明与详解 Android Debug Bridge(ADB)是一个非常有用的工具,它可以帮助开发人员在Android设备和计算机之间进行通信,以便在设备上进行调试、测试和安装...
    99+
    2023-09-02
    android adb
  • 详解spring与shiro集成
    Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。在示例之前,需要导入shiro-spring及...
    99+
    2023-05-31
    spring shiro 集成
  • 详解Vue.jsClass与Style绑定
    目录Vue.js Class与Style绑定绑定HTML Class对象语法数组语法绑定内联样式对象语法数组语法自动添加前缀总结Vue.js Class与Style绑定 对于数据绑定...
    99+
    2024-04-02
  • 详解nginx的root与alias
    文章目录 1. 结论2. 详解root2.1 基本用法2.2 location的最左匹配原则2.3 index2.4 nginx location解析url工作流程2.5 末尾'/' 3. 详解alias3.1 基本用法 4...
    99+
    2023-08-19
    nginx 运维 服务器
  • python ast 详解与用法
    目录 基本概念节点类型ast.Assignast.Nameast.Constantast.Callast.Attribute 结点的遍历ast源码示例 结点的修改示例 参考链接 基本概念 在 python 中,我们可...
    99+
    2023-08-24
    python 开发语言 java
  • Vue3中ref与reactive的详解与扩展
    目录一、ref和reactive1.reactive2.ref 二、shallowRef和shallowReactive1. ref和shallowRef2. reactive和sh...
    99+
    2024-04-02
  • 详解JWT与Token的应用与原理
    目录JWT的应用Token的组成原理JWT对称加密JWT非对称加密生成私钥和公钥前言:JWT全称“JSON Web Token”,是实现Token的机制。官网...
    99+
    2023-05-16
    JWT应用与原理 Token应用与原理
  • C#实现加密与解密详解
    目录一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5、SHA1等)1、使用抽象类HashAlgorithm2、使用抽象类MD53、使用MD5CryptoSe...
    99+
    2024-04-02
  • JavaScript实现加密与解密详解
    目前原生JS貌似并没有提供MD5计算相关的函数方法,只能自己实现或者使用前辈大神写好的。 一、使用crypto.js库进行加密 GitHub的 https://github...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作