首页 > 解决方案 > 为什么我不能在 Android Studio 中使用 ImageButton 上传图像文件?

问题描述

我正在尝试使用图像按钮上传图像。我没有收到任何错误或崩溃,但在上传我的图片后,我收到了一条警报:“失败!”,以及 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();
        }
    }

标签: javaandroidfirebasefirebase-storage

解决方案


如果您的错误消息是:

对象在该位置不存在

那么这意味着您尝试下载的对象根本不存在。这是您用于构建该位置的代码:

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

因此,您似乎正在尝试使用与当前时间匹配的名称来获取应该存在的文件。我怀疑这几乎永远不会奏效。由于我们看不到您的存储桶的内容,而且我们不知道您在此处传递的确切字符串,因此不知道如何解决此问题。您的代码应仅获取其名称存在于存储桶中的对象。


推荐阅读