Firebase хранилище, не может получить URL-адрес загрузки (Android) - PullRequest
0 голосов
/ 24 августа 2018

пока это мой код.

 public void getimage() {
    FirebaseStorage storagi = FirebaseStorage.getInstance();
    StorageReference imagerefi = storagi.getReference();
        userimage = (ImageView) findViewById(R.id.imageViewuser);
        StorageReference pathReference = imagerefi.child("images/"+somename);

        imagerefi.child("images/"+somename).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                // Got the download URL for 'users/me/profile.png'
                uri2 = uri.toString();
            }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle any errors
            }
        });



Glide.with(this).asDrawable().apply(fitCenterTransform()).load(uri2).into(userimage);


    }

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

В основном я хочу получить файл, который назван в честь пользовательского uid firebase, и внутри папки с названием images внутри корневого каталога хранилища firebase, и отобразить его в виде изображения.

Большое спасибо за любую помощь! Я пытался решить эту проблему неделями.

// часть кода была недавно изменена из сообщения stactoverflow // поэтому ничего не делает в этой текущей конфигурации, я знаю об этом

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Чтобы решить эту проблему, просто переместите следующую строку кода:

Glide.with(this).asDrawable().apply(fitCenterTransform()).load(uri2).into(userimage);

Внутри обратного вызова сразу после следующей строки кода:

uri2 = uri.toString();

Помните, onSuccess() методимеет асинхронное поведение, и если вы попытаетесь использовать значение переменной uri2 вне этого метода, оно всегда будет null, поскольку к тому времени, когда вы пытаетесь получить к нему доступ, ее значение еще не доступно.Если вы хотите использовать его вне этого метода, я рекомендую вам увидеть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделать с помощью пользовательского обратного вызова.Вы также можете взглянуть на это видео для лучшего понимания.

0 голосов
/ 24 августа 2018

Я хочу, чтобы somename было действительным именемпопробуйте это

просто переместите строку набора изображения в viewview внутри onSuccess, чтобы убедиться, что uri2 является URL-адресом из firebaseStorage

public void getimage() {
    FirebaseStorage storagi = FirebaseStorage.getInstance();
    StorageReference imagerefi = storagi.getReference();
        userimage = (ImageView) findViewById(R.id.imageViewuser);
        StorageReference pathReference = imagerefi.child("images/"+somename);

        imagerefi.child("images/"+somename).getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                // Got the download URL for 'users/me/profile.png'
                uri2 = uri.toString();
           Glide.with(this).asDrawable().apply(fitCenterTransform()).load(uri2).into(userimage);
 }
        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle any errors

                Log.e("ERRORLOADING",exception.getMessage());
            }
        });





    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...