URL возвращаемого изображения из Firebase String Method - PullRequest
0 голосов
/ 21 мая 2019

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

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

Чего я хочу добиться, так это получить URL-адрес изображения и затем отобразить его в тосте за пределами метода загрузки, если загрузка прошла успешно

Это то, что я пробовал;

      insertImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(TestFirebaseImageUpload.this,  firebaseImageUpload(filePath), Toast.LENGTH_SHORT).show();
            }
        });

при нажатии кнопки insertImage отображается тост, который должен содержать URL-адрес изображения, полученного путем отправки файла uri в firebaseImageUploadMethod.

Это мой метод загрузки firebaseImage

    public String firebaseImageUpload(Uri filePath) {
        if (filePath != null) {
            // Setting progressDialog Title.
            progressDialog = new ProgressDialog(this);
            progressDialog.setTitle(" Uploading...");
            progressDialog.show();

            ref = imagePath.child("images/" + UUID.randomUUID().toString());
            ref.putFile(filePath)
                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                            progressDialog.dismiss();
                            Toast.makeText(TestFirebaseImageUpload.this, "Uploaded ... ", Toast.LENGTH_SHORT).show();
                            ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                @Override
                                public void onSuccess(Uri uri) {
                                    URL = uri.toString();
                                }
                            });
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            progressDialog.dismiss();
                            URL = "";
                            Toast.makeText(TestFirebaseImageUpload.this, "Not Uploaded ... ", Toast.LENGTH_SHORT).show();
                        }
                    })
                    .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                            double progress = (100.0 * taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
                            progressDialog.setMessage("Uploaded " + (int) progress + "%");
                        }
                    });
        }
        return URL;
    }

Мне нужно отобразить URL-адрес в тосте, который отображается при нажатии кнопки insertImage.

Спасибо

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете настроить обратный вызов

onClick(){
      firebaseImageUpload(filePath, Callback)
    }

    onUploaded(){
      // Display toast here
    }

ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
    @Override
    public void onSuccess(Uri uri) {
    URL = uri.toString(); 
    callback.onUploaded(URL);
    }
    });

     interface Callback{
       void onUploaded(String url)
     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...