Получение NullPointerException в методе getDrawable на Glide - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть просмотр изображения, и я хотел бы получить его растровое изображение ...

Вот мой код:

Настройка просмотра изображения:

ImageView imageView;
imageView =  findViewById(R.id.image_wallpaper);
Glide.with(this).load(current_image.getImageURL()).into(imageView);

Получение растрового изображения:

setButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View arg0) {
        DisplayMetrics metrics = new DisplayMetrics();

        imageView.invalidate();  // I get the crash with or without that line
        Bitmap mBitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();  // CRASH HERE

        // more things using the mBitmap

    }
});

Файл cra sh log:

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'android.graphics.Bitmap android.graphics.drawable.BitmapDrawable.getBitmap()' on a null object reference
com.XXXX.XXXXXXX.ImageActivity$4.onClick (ImageActivity.java:170)
android.view.View.performClick (View.java:5246)
android.view.View$PerformClick.run (View.java:21200)
android.os.Handler.handleCallback (Handler.java:739)
android.os.Handler.dispatchMessage (Handler.java:95)
android.os.Looper.loop (Looper.java:145)
android.app.ActivityThread.main (ActivityThread.java:6946)
java.lang.reflect.Method.invoke (Method.java)
java.lang.reflect.Method.invoke (Method.java:372)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1404)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1199)      

Я использую последнюю версию Glide:

implementation 'com.github.bumptech.glide:glide:4.9.0'                   // glide

Этот шаблон sh журнал исходит от Firebase Crashlytics, многие пользователи получают эту ошибку, но я не могу воспроизвести ее на своих устройствах.

В чем проблема? Как я могу это исправить?

Спасибо

Ответы [ 3 ]

0 голосов
/ 14 февраля 2020

В библиотеке Glide есть метод, в котором вы можете получить растровое изображение, вы можете использовать этот метод для получения растрового изображения и установки его в Imageview.

Вы также можете использовать ресурс drawable вместо «imagepath» .

Glide.with(context)
        .asBitmap()
        .placeholder(placeholder)
        .error(placeholder)
        .load(
            "imagepath"
        )
        .into(object : CustomTarget<Bitmap>() {
            override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
                // here you will get Bitmap file and you can use it to set on image view.
                image.setImageBitmap(resource)
            }

            override fun onLoadCleared(placeholder: Drawable?) {
                // this is called when imageView is cleared on lifecycle call or for some other reason.
                // if you are referencing the bitmap somewhere else too other than this imageView clear it here as you can no longer have the bitmap.              
            }
        })
0 голосов
/ 14 февраля 2020

Добавьте зависимость:

implementation 'com.github.bumptech.glide:glide:3.7.0'

и напишите фрагмент кода ниже:

                             try {
                                Glide.with(getApplicationContext())
                                        .load(YOUR_IMAGE_URL)
                                        .asBitmap()
                                        .into(new SimpleTarget<Bitmap>() {
                                            @Override
                                            public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                                                Uri bmpUri = Common.getLocalBitmapUri(resource, context);
                                    your_image_view.setImageBitmap(resource);

                                            }

                                            @Override
                                            public void onLoadFailed(Exception e, Drawable errorDrawable) {
                                                super.onLoadFailed(e, errorDrawable);
                                            }
                                        });
                            } catch (Exception e) {
                                e.getStackTrace();
                            }

Надеюсь, это поможет вам

0 голосов
/ 14 февраля 2020

Не могли бы вы опубликовать инициализацию imageView? Если это не сделано, вам нужно сначала инициализировать его:

ImageView imageView = findViewById(R.id.myimageViewId);
...