Как вызвать атрибут частного класса вне его? - PullRequest
0 голосов
/ 18 декабря 2018

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

ФУНКЦИЯ:

if(imageUri != null){
    StorageReference fileReference = storageReference.child(System.currentTimeMillis()+"."+getFileExtension(imageUri));
    fileReference.putFile(imageUri).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>(){
        @Override
        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception{
            if(!task.isSuccessful()){
                throw task.getException();
            }
            return storageReference.getDownloadUrl();
         }
    }).addOnCompleteListener(new OnCompleteListener<Uri>(){
        @Override
        public void onComplete(@NonNull Task<Uri> task){
            if(task.isSuccessful()){
                Uri downloadUri = task.getResult();
                u.setImageURL(downloadUri.toString());
                Toast.makeText(TelaRegistro.this, u.getImageURL(), Toast.LENGTH_LONG).show();
            }else{
                u.setImageURL("Sem imagem!");
            }
        }
    });
}else{
    u.setImageURL("Sem imagem!");
}

ПРОБЛЕМА:

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

Uri downloadUri = task.getResult();
u.setImageURL(downloadUri.toString());
Toast.makeText(TelaRegistro.this, u.getImageURL(), Toast.LENGTH_LONG).show();

Но когда япопытаться вызвать Get снова, он возвращает нулевое значение, как в случае со строкой ниже.

Toast.makeText(TelaRegistro.this, u.getImageURL(), Toast.LENGTH_LONG).show();

Я начинающий программист, и я пытался решить эту проблему в течение нескольких дней, яне знаю что еще делать.Не могли бы вы помочь мне?

1 Ответ

0 голосов
/ 18 декабря 2018

Я не совсем понял, что вы имеете в виду под частным классом и получил значение вне его, относительно downloadURl(), который не является атрибутом класса.

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

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

Подробнее об асинхронном поведении Firebase здесь.

Экземпляр 1

Экземпляр 2

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