首页 > 解决方案 > 错误:不兼容的类型:任务无法转换为 Uri

问题描述

我想获取我在 Firebase 中上传的图片的网址。要获取图像,我需要拥有Url特定图像的。但是在获取过程中出现了问题。输出框显示以下内容:

错误:不兼容的类型:任务无法转换为 Uri

如果我使用Task<Uri>图像 url 变得不同。与乌里相比。

  private void startPosting() {
    if (filePath != null) {
        final ProgressDialog progressDialog = new ProgressDialog(this);
        progressDialog.setTitle("Uploading...");
        progressDialog.show();

        final StorageReference ref = mStorage.child("Quote_Image" + UUID.randomUUID().toString());
        ref.putFile(filePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {

                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        progressDialog.dismiss();
                        Toast.makeText(adminUpdateQuotesSend.this , "Uploaded" , Toast.LENGTH_SHORT).show();
                        mDatbase = FirebaseDatabase.getInstance().getReference().child("Quotes");
                        DatabaseReference newPost = mDatbase.push();
                        Uri down=ref.getDownloadUrl();
                            Uri dow=down;
                        newPost.child("ImageUrl").setValue(ref.getDownloadUrl());
                       // newPost.child("Positivity").setValue(PositiveDesc);
                    }
                })
                .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 + "%");

                    }
                });

    }
}

错误在这行代码上闪烁:

Uri down=ref.getDownloadUrl();

标签: androidfirebasefirebase-storage

解决方案


您收到以下错误:

不兼容的类型:任务不能转换为 Uri

因为ref.getDownloadUrl()返回一个Task对象而不是一个Uri对象。Java 中没有办法将Task对象转换为Uri对象。

为了获取下载 url,您需要使用addOnSuccessListener,如以下代码行所示:

ref.putFile(filePath).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        ref.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
            @Override
            public void onSuccess(Uri uri) {
                String url = uri.toString();

                //Do what you need to do with url
            }
        });
    }
});

推荐阅读