getBytes из Firebase storageReference не работает - PullRequest
0 голосов
/ 10 октября 2018

Я создаю свое первое приложение, в котором я хочу загрузить изображения из хранилища Firebase в Bitmap, а затем, в свою очередь, изменить обои телефона.

В настоящее время функция не входит ни в

 onSuccess(byte[] bytes) {

или

 onFailure(@NonNull Exception exception) {

Вместо этого он пропускает прямо к

return bmp[0]; 

Я не понимаю, почему и что я делаю неправильно.

  • Storage и storageRef не равны нулю.

    public static Bitmap getImageBitmap(String url) {
    
        com.google.firebase.storage.FirebaseStorage storage = com.google.firebase.storage.FirebaseStorage.getInstance();
        StorageReference gsReference = storage.getReferenceFromUrl(url);
    
        if (bmp == null) {
            bmp = new Bitmap[1];
        }
    
         final long ONE_MEGABYTE = 1024 * 1024;
    
         gsReference.getBytes(ONE_MEGABYTE)
        .addOnSuccessListener(new OnSuccessListener<byte[]>(){            
            @Override
            public void onSuccess(byte[] bytes) {
                BitmapFactory.Options options = new 
                BitmapFactory.Options();
                options.inMutable = true;
                bmp[0] = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                int errorCode = ((StorageException) exception).getErrorCode();
                String errorMessage = exception.getMessage();
                Log.d("TAG", errorMessage + errorCode);
            }
        });
        return bmp[0];
    }
    

В своих попытках я попытался использовать Glide следующим образом:

Glide.with(user.getmContext())
            .asBitmap()
            .load(url)
            .into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                    bmp[0] = resource;
                }
            });
    return bmp[0];

Но это не принесло никаких изменений, onResourceReady (ресурс Bitmap) никогда не вызывается.

1 Ответ

0 голосов
/ 20 апреля 2019

Вам нужно дождаться вашего результата.Метод Get bytes является асинхронным, поэтому вы добавляете прослушиватели, и ваше значение будет установлено после выполнения асинхронной задачи

...