我想获取在Firebase中上传的图像的网址。要获取图像,我需要具有特定图像的Url
。但是在获取过程中出现了问题。 “输出”框显示以下内容:
错误:类型不兼容:任务无法转换为Uri
如果我使用Task<Uri>
,则图片网址会有所不同。与乌里相比。
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();
答案 0 :(得分:1)
您遇到以下错误:
不兼容的类型:无法将任务转换为Uri
因为ref.getDownloadUrl()
返回一个Task
对象,而不返回Uri
对象。 Java中无法将Task
对象转换为Uri
对象。
要获取下载网址,您需要使用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
}
});
}
});
答案 1 :(得分:1)
请确保您是否使用任务检查isSuccessful()
要获取您要上传的文件的下载URL,应在这样的任务中运行该文件。
首先,我们做一个参考来存储您的文件,然后我们运行一个任务等待结果,如果结果为true,在这种情况下,我们返回文件的downloadUrl,然后当我们{{1} },这就是我们知道已经上传文件并具有URL的地方,然后我们再次检查上传过程是否正确完成,并使用
获取该文件的下载URL。 .addOnCompleteListener
,因为它是一个URI,所以我们可以将该URL转换为类似Uri downloadUrl = task.getResult();
或简单地String downloadUrl = task.getResult().toString();
downloadUrl.toString();
唯一的是final StorageReference ref = mStorage.child("Quote_Image" + UUID.randomUUID().toString());
ref.putFile(filePath).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();
}
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
progressDialog.dismiss();
Toast.makeText(adminUpdateQuotesSend.this , "Uploaded" , Toast.LENGTH_SHORT).show();
mDatbase = FirebaseDatabase.getInstance().getReference().child("Quotes");
DatabaseReference newPost = mDatbase.push();
Uri downloadUrl = task.getResult();
newPost.child("ImageUrl").setValue(downloadUrl.toString());
// newPost.child("Positivity").setValue(PositiveDesc);
} else {
Toast.makeText(mContext, "upload failed: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
在这里不起作用。