亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從 firebase 存儲中獲取 imageUrl 以存儲在 firebase 實時數據庫中?

如何從 firebase 存儲中獲取 imageUrl 以存儲在 firebase 實時數據庫中?

飲歌長嘯 2022-06-04 14:53:15
基本上我創建了一個名為“俱樂部”的課程。我成功地將一個新俱樂部保存到 Firebase 實時數據庫,沒有任何實際問題,直到我想將 Firebase 存儲中的 imageURL(稱為 clubImage)添加到我的俱樂部類。我可以使用以下代碼成功地將我的圖像上傳到 Firebase 存儲。    private void uploadImage() {        //upload selected image to database        //code from https://code.tutsplus.com/tutorials/image-upload-to-firebase-in-android-application--cms-29934             if(filePath != null)        {            final ProgressDialog progressDialog = new ProgressDialog(this);            progressDialog.setTitle("Uploading...");            progressDialog.show();            final StorageReference ref = storageReference.child("images/"+ UUID.randomUUID().toString());            ref.putFile(filePath)                    .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {                        @Override                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {                            progressDialog.dismiss();                            Toast.makeText(AddClubActivity.this, "Uploaded", Toast.LENGTH_SHORT).show();                        }                    })                    .addOnFailureListener(new OnFailureListener() {                        @Override                        public void onFailure(@NonNull Exception e) {                            progressDialog.dismiss();                            Toast.makeText(AddClubActivity.this, "Failed "+e.getMessage(), Toast.LENGTH_SHORT).show();                        }    }這一切都很好。但是,在同樣的方法中,我也有這段代碼,我嘗試在其中獲取上傳圖像的下載 URL。            ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {                @Override                public void onSuccess(Uri uri) {                    Uri downloadUrl = uri;                    clubImage = downloadUrl.toString();                }            });我知道為同一件事設置兩個 OnSuccessListener 效率很低,我只是不確定如何同時上傳圖像和獲取 downloadUrl。無論如何,這不起作用,我的新俱樂部在沒有 clubImage 字段的情況下保存。我收到錯誤:E/StorageException:StorageException 已發生。對象在該位置不存在。有誰知道如何解決這一問題?謝謝。
查看完整描述

2 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

我知道為同一件事設置兩個 OnSuccessListener 效率低下


您有兩個要嘗試完成的任務:


上傳一個文件

獲取該文件的下載 URL

由于這是兩個獨立的任務,因此您需要兩個OnSuccessListeners. 這并沒有什么低效的地方,任務也不盡相同。


上傳后獲取下載 URL的 Firebase 文檔準確地展示了如何連續完成這兩個任務:


final StorageReference ref = storageRef.child("images/mountains.jpg");

uploadTask = ref.putFile(file);


Task<Uri> urlTask = uploadTask.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();

        }


        // Continue with the task to get the download URL

        return ref.getDownloadUrl();

    }

}).addOnCompleteListener(new OnCompleteListener<Uri>() {

    @Override

    public void onComplete(@NonNull Task<Uri> task) {

        if (task.isSuccessful()) {

            Uri downloadUri = task.getResult();

        } else {

            // Handle failures

            // ...

        }

    }

});

您會注意到,此代碼首先完成uploadTask(上傳文件),然后才開始一個新任務以獲取下載 URL。按此順序執行任務可防止您收到“對象在該位置不存在”錯誤消息。


查看完整回答
反對 回復 2022-06-04
?
www說

TA貢獻1775條經驗 獲得超8個贊

嘗試使用這個:


private Uri ImageUri;   //and get image from gallery intent to this ImageUri

...............

StorageReference filePath = FirebaseStorage.getInstance().getReference().child("Club Images").child(ImageUri.getLastPathSegment() + ".jpg");


    filePath.putFile(ImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {

        @Override

        public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task)

        {

            if(task.isSuccessful())

            {

                downloadUrl = task.getResult().getDownloadUrl().toString();


                updatetoFirebaseDatabase();


            }

            else

            {

                String message = task.getException().getMessage();

            }

        }

    });

........... 

創建 updatetoFirebaseDatabase(String imageUrl) 方法:


updatetoFirebaseDatabase(String imageUrl){

    //implement FirebaseDatabase setvalue method with given image URL

}


查看完整回答
反對 回復 2022-06-04
  • 2 回答
  • 0 關注
  • 160 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號