Glide не загружает изображение из StorageReference

У меня проблема с загрузкой изображения из StorageReference в ImageView с использованием Glide 4.9.0 (последняя версия).

Он застрял на PlaceHolder.. Когда я пытаюсь поместить загружаемый URL-адрес моей ссылки, он работает.

StorageReference ref = FirebaseStorage.getInstance().getReference().child("myImage")

//It's not working
Glide.with(mContext)
   .load(ref)
   .placeholder(R.drawable.ic_loading_circle)
   .error(R.drawable.ic_loading_circle)
   .into(mImageView);

//It's working
ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>()
{
    @Override
    public void onSuccess(Uri downloadUrl)
    {
        Glide.with(mContext)
            .load(downloadUrl.toString())
            .placeholder(R.drawable.ic_loading_circle)
            .error(R.drawable.ic_loading_circle)
            .into(mImageView);
    }
});

Я не видел никаких ошибок при использовании try-catch, я уже указал разрешение на доступ в Интернет в манифесте. Другие изображения из drawable также работают

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

любое решение или альтернатива? потому что использование getDownloadUrl().addOnSuccessListener для получения URI настолько медленное

"любая альтернатива Glide?" Запрашивать рекомендацию по технологии не по теме на Stack Overflow. Но если вы зададите этот вопрос в своей любимой поисковой системе, вы найдете множество альтернатив. Тем не менее: необходимость вызова getDownloadUrl() — это Firebase API и не имеет ничего общего с Glide, поэтому большинству других библиотек также потребуется этот шаг.

Frank van Puffelen 28.05.2019 15:58

Еще одна вещь, которую вам нужно сделать, прежде чем Glide сможет творить чудеса. Регистрация грузчика. См. фрагментПрочтите это здесь

Kofi T 23.08.2020 12:13
2
2
1 773
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Решение, работающее для вас, является правильным решением. Я делал все так же.

profileListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            String imageUrl = dataSnapshot.getValue(String.class);

            if (ProfileFragment.this.getActivity() != null)
                Glide.with(ProfileFragment.this.getActivity())
                        .load(imageUrl)
                        .placeholder(R.drawable.default_image)
                        .circleCrop()
                        .into(photoPhoto);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    };

Если вы находите это медленным, просто включите автономное сохранение в firebase.

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

Перед вызовом любого экземпляра FirebaseDatabase при открытии приложения.

Firebase очень эффективно управляет синхронизацией.

Примечание. Всякий раз, когда вы обнаружите какую-либо случайную аномалию, вызывающую моментальный снимок во время разработки приложения, попробуйте очистить данные приложения или переустановить его.

Работал нормально для меня!

Я не думаю, что Glide поддерживает StorageReference это другой протокол, но вы можете использовать FirebaseUI, который его поддерживает, и использует скрытую Glideбиблиотеку.

FirebaseUI

Using FirebaseUI you can quickly and easily download, cache, and display images from Cloud Storage using our integration with Glide.

First, add FirebaseUI to your app/build.gradle:

dependencies { // FirebaseUI Storage only implementation 'com.firebaseui:firebase-ui-storage:4.3.1' }

Затем вы можете загружать изображения непосредственно из хранилища в ImageView:

// Reference to an image file in Cloud Storage
StorageReference storageReference = FirebaseStorage.getInstance().getReference();

// ImageView in your Activity
ImageView imageView = findViewById(R.id.imageView);

// Download directly from StorageReference using Glide
// (See MyAppGlideModule for Loader registration)
GlideApp.with(this /* context */)
        .load(storageReference)
        .into(imageView);

Документация Firebase для загрузки изображения напрямую через Glide

Ответы выше не работали для меня.

В Glide 4.8.0 у меня сработало следующее:

  1. Сначала убедитесь, что в вашем приложении есть следующее build.gradle

    implementation 'com.firebaseui:firebase-ui-storage:3.2.2'

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

    annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

2. Затем используйте следующий код для загрузки изображения из ссылки на хранилище.

    DrawableCrossFadeFactory factory =
            new DrawableCrossFadeFactory.Builder().setCrossFadeEnabled(true).build();

    RequestOptions options =
            new RequestOptions()
                    .centerCrop()
                    .diskCacheStrategy(DiskCacheStrategy.RESOURCE)
                    .placeholder(R.drawable.your_progress_animation)
                    .error(R.drawable.ic_your_on_error_image);

    // Download directly from StorageReference using Glide
    // (See MyAppGlideModule for Loader registration)
    Glide.with(getAppContext())
            .load(item.reference)
            .transition(withCrossFade(factory))
            .apply(options)
            .into(holder.signatureImageView);

Другие вопросы по теме