Не скользить Загрузка изображения из хранилищаСсылка - PullRequest
0 голосов
/ 28 мая 2019

У меня проблема при загрузке изображения из 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 работают также

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

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

Ответы [ 3 ]

0 голосов
/ 29 мая 2019

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

FirebaseUI

0 голосов
/ 29 мая 2019

Используя FirebaseUI, вы можете быстро и легко загружать, кэшировать и отображать изображения из облачного хранилища, используя нашу интеграцию с Glide.

Сначала добавьте FirebaseUI в приложение / build.gradle:

зависимостей {// реализация FirebaseUI Storage only '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

0 голосов
/ 28 мая 2019

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

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 очень эффективно управляет синхронизацией.

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

Отлично сработало для меня!

...