簡體   English   中英

為什么我無法在 Android Studio 中使用 ImageButton 上傳圖像文件?

[英]Why Couldn't I upload Image file using ImageButton in Android Studio?

我正在嘗試使用圖像按鈕上傳圖像。 我沒有收到任何錯誤或崩潰,但在上傳我的圖片后,我收到一條警報:“失敗”。 和 e 的消息。

你能幫我嗎?

 private void uploadImage() {
        final ProgressDialog pd = new ProgressDialog(getContext());
        pd.setMessage("Uploading");
        pd.show();

        if(imageUri != null) {
            final StorageReference fileReference = storageReference.child(System.currentTimeMillis() + "." + getFileExtension(imageUri));
            uploadTask = fileReference.getFile(imageUri);
            uploadTask.continueWith(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 fileReference.getDownloadUrl();
                }
            }).addOnCompleteListener(new OnCompleteListener<Uri>() {
                @Override
                public void onComplete(@NonNull Task<Uri> task) {

                    if(task.isSuccessful()) {
                        Uri downloadUri = task.getResult();
                        String mUri = downloadUri.toString();
                        reference = FirebaseDatabase.getInstance().getReference().child("users").child(fuser.getUid());
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("imageURL", mUri);
                        reference.updateChildren(map);
                        pd.dismiss();
                    } else {
                        Toast.makeText(getContext(), "Failed!", Toast.LENGTH_SHORT).show();
                        pd.dismiss();
                    }
                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    Toast.makeText(getContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
                    pd.dismiss();
                }
            });
        } else {
            Toast.makeText(getContext(), "No Image Selected", Toast.LENGTH_SHORT).show();
        }
    }

如果您的錯誤消息是:

Object 在該位置不存在

那么這意味着您嘗試下載的 object 根本不存在。 這是您用於構建該位置的代碼:

final StorageReference fileReference = storageReference
    .child(System.currentTimeMillis() + "." + getFileExtension(imageUri));

因此,您似乎正在嘗試使用與當前時間匹配的名稱來獲取應該存在的文件。 我懷疑這幾乎永遠不會奏效。 由於我們看不到您的存儲桶的內容,而且我們不知道您在此處傳遞的確切字符串,因此不知道如何解決此問題。 您的代碼應僅獲取其名稱存在於存儲桶中的對象。

您沒有在任何地方調用fileReference.put方法,這意味着您沒有上傳任何數據。

因此,當您調用fileReference.getDownloadURL()時,它會引發錯誤,因為該位置沒有文件可以返回下載 URL 。

我建議閱讀有關 上傳文件的文檔,並等待上傳完成,然后再嘗試下載 URL。

暫無
暫無

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

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