亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Matisse與Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load

 更新時間:2021年08月19日 09:59:35   作者:bfther  
這篇文章主要介紹了在使用Matisse與glide4.0.0以及4.0.0之后的版本過程中,碰到該問題java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load的解決方法

問題描述

在使用 Matisseglide 4.0.0 以及 4.0.0 之后的版本過程中,發(fā)現(xiàn)通過
Matisse 的 wiki 代碼調用選取圖片的方式后,會出現(xiàn)本文標題的錯誤
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)

問題定位

通過報錯信息,可以發(fā)現(xiàn)出現(xiàn)錯誤的調用路徑,根據路徑依次查看,發(fā)現(xiàn)在類 GlideEngine.java中,出現(xiàn)如下代碼:

    @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);
    }

其中,有一行顯示為紅色,也就是說,該行代碼出現(xiàn)錯誤,導致程序的崩潰。

.asBitmap()

問題分析

在問題定位中,發(fā)現(xiàn) Matisse 在通過 Glide 調用相關 api 的時候出現(xiàn)錯誤,因此,問題主要原因出現(xiàn)在 Glide 的使用上。通過查看 Glide 的 相關文檔,發(fā)現(xiàn) Glide 從 v3 到 v4 做了一些改動。
相關文檔 中發(fā)現(xiàn)

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

仔細看這里的內容,這里 .asBitmap() 的調用是在 .load(url) 之前,而我們在 問題定位 中的代碼, .asBitmap() 的調用是在 .load(url) 之后。隨后我在測試中,調換了兩者的位置,發(fā)現(xiàn) .asBitmap() .load(url)之前調用沒有問題,而在 .load(url) 之后調用,的確出現(xiàn)了本文所描述的問題。

問題解決

到此,問題的原因已經很明確了。下面來談談問題的解決方式。

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,重新實現(xiàn) ImageEngine,具體實現(xiàn)如下(注:該類未進行封裝,代碼不優(yōu)雅,各位可根據自己業(yè)務需求,進行相應的修改優(yōu)化)

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 升級后,會出現(xiàn)這種問題。希望 Matisse 貢獻者在接下來的維護中,修復這個問題。
本方案在我目前的項目中可正常使用,如果各位沒有解決問題,還請勿噴。

到此這篇關于詳解Matisse與Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load的文章就介紹到這了,更多相關詳解Matisse與Glide內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Android清空編輯框內容功能的實現(xiàn)實例代碼

    Android清空編輯框內容功能的實現(xiàn)實例代碼

    本篇文章主要介紹了Android清空編輯框數(shù)據功能的實現(xiàn)實例代碼,非常具有實用價值,需要的朋友可以參考下。
    2017-03-03
  • Android實現(xiàn)自由拖動并顯示文字的懸浮框

    Android實現(xiàn)自由拖動并顯示文字的懸浮框

    這篇文章主要為大家詳細介紹了Android實現(xiàn)自由拖動并顯示文字的懸浮框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • Flutter 如何正確顯示SnackBar

    Flutter 如何正確顯示SnackBar

    Snackbar是Android支持庫中用于顯示簡單消息并且提供和用戶的一個簡單操作的一種彈出式提醒。當使用Snackbar時,提示會出現(xiàn)在消息最底部,通常含有一段信息和一個可點擊的按鈕。本文主要介紹了Flutter 如何正確顯示 SnackBar
    2021-05-05
  • Android?LinearLayout快速設置每個item間隔

    Android?LinearLayout快速設置每個item間隔

    這篇文章主要介紹了Android?LinearLayout快速設置每個item間隔的相關資料,需要的朋友可以參考下
    2023-07-07
  • Android Studio升級4.1.1后各種錯誤和解決方案

    Android Studio升級4.1.1后各種錯誤和解決方案

    這篇文章主要介紹了Android Studio升級4.1.1后各種錯誤和解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Android獲取App內存使用情況的方法

    Android獲取App內存使用情況的方法

    本篇文章主要介紹了Android獲取App內存使用情況的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • RecyclerView優(yōu)雅實現(xiàn)復雜列表布局

    RecyclerView優(yōu)雅實現(xiàn)復雜列表布局

    這篇文章主要為大家詳細介紹了RecyclerView優(yōu)雅實現(xiàn)復雜列表布局,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • Android手機內存中文件的讀寫方法小結

    Android手機內存中文件的讀寫方法小結

    這篇文章主要介紹了Android手機內存中文件的讀寫方法,實例總結了Android針對文件讀寫操作的相關技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Android與JS相互調用的方法

    Android與JS相互調用的方法

    這篇文章主要介紹了Android與JS相互通信的方法,幫助大家更好的理解和學習使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • Android 開啟閃光燈做手電筒的詳解

    Android 開啟閃光燈做手電筒的詳解

    本篇文章是對Android中開啟閃光燈做手電筒的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06

最新評論