簡體   English   中英

Android-Firebase Storage getDownloadUrl在首次調用時返回null

[英]Android - Firebase Storage getDownloadUrl returns null on first call

我目前在我的Android應用中具有一項功能,該功能使我可以發表評論並在其中附加照片。 注釋通過其下載URL對圖像的引用被上傳到Cloud Firestore,注釋被上傳到Firebase Storage。

我遇到的問題是,在第一次調用該方法時,它似乎沒有檢索到下載URL,但是當我進行第二次調用時,它成功地檢索了該URL。 在下面,我包括了該方法,這簡稱為“按鈕單擊偵聽器”。

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_event_comments);

    submitComment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            newComment();
        }
    });



        private void newComment() {

    Date date = new Date();
    EventComment mcomment = new EventComment();
    mcomment.setComment(commentText.getText().toString());
    mcomment.setDate_created(date);
   // mcomment.setUsername(firebaseAuth.getCurrentUser().getEmail());

    String commentID = Long.toHexString(Double.doubleToLongBits(Math.random()));

    StorageReference filePath = firebaseStorage.child("Photos").child(imageUri.getLastPathSegment());

    filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

            if(taskSnapshot.getDownloadUrl() != null){
                imgDownloadUri = taskSnapshot.getDownloadUrl();

            } else if(taskSnapshot.getMetadata().getDownloadUrl() != null) {
                imgDownloadUri = taskSnapshot.getMetadata().getDownloadUrl();
            }
            Toast.makeText(getApplicationContext(), "Image uploaded", Toast.LENGTH_SHORT).show();
        }


    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();

        }
    });

    if (imgDownloadUri != null) {
        mcomment.setImageUri(imgDownloadUri.toString());

    }

    firestore.collection("events").document(event_id).collection("comments").document(commentID)
            .set(mcomment, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Toast.makeText(EventCommentsActivity.this, "Comment posted successfully", Toast.LENGTH_SHORT).show();
        }

    });


}

    firestore.collection("events").document(event_id).collection("comments").document(commentID)
            .set(mcomment, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            Toast.makeText(EventCommentsActivity.this, "Comment posted successfully", Toast.LENGTH_SHORT).show();
        }

    });

我已經調試了多次,但不確定是什么原因造成的。 也許是按照回調的工作方式進行操作,而將回調功能全部放在一種方法中可能會引起問題?

對於任何反饋,我們都表示感謝。

干杯

我在代碼中進行解釋,請參見代碼內部的注釋,如果您有任何疑問,請詢問!

private void newComment() {
        StorageReference filePath = firebaseStorage.child("Photos").child(imageUri.getLastPathSegment());
         //start progessbar here

        filePath.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                if(taskSnapshot.getDownloadUrl() != null){
                    imgDownloadUri = taskSnapshot.getDownloadUrl();

                } else if(taskSnapshot.getMetadata().getDownloadUrl() != null) {
                    imgDownloadUri = taskSnapshot.getMetadata().getDownloadUrl();
                }
                if (imgDownloadUri != null) {
                   //close progessbar here
            mcomment.setImageUri(imgDownloadUri.toString());

                }
                Toast.makeText(getApplicationContext(), "Image uploaded", Toast.LENGTH_SHORT).show();
            }


        }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();

            }
        });



        firestore.collection("events").document(event_id).collection("comments").document(commentID)
                .set(mcomment, SetOptions.merge()).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                Toast.makeText(EventCommentsActivity.this, "Comment posted successfully", Toast.LENGTH_SHORT).show();
            }

        });


    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM