android - task.getResult().getDownloadUrl() 方法不起作用
问题描述
private void storeFirestore(@NonNull Task<UploadTask.TaskSnapshot> task, String user_name)
{
Uri download_uri;
if(task != null) {
download_uri = task.getResult().getDownloadUrl();
} else {
download_uri = mainImageURI;
}
Map<String, String> userMap = new HashMap<>();
userMap.put("name", user_name);
userMap.put("image", download_uri.toString());
firebaseFirestore.collection("Users").document(user_id).set(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
Toast.makeText(SetupActivity.this, "The user Settings are updated.", Toast.LENGTH_LONG).show();
Intent mainIntent = new Intent(SetupActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
} else {
String error = task.getException().getMessage();
Toast.makeText(SetupActivity.this, "(FIRESTORE Error) : " + error, Toast.LENGTH_LONG).show();
}
setupProgress.setVisibility(View.INVISIBLE);
}
});
}
getDownloadUrl 没有在它下面的红线处工作,或者是 downloadUrl 需要为它添加一个方法。
解决方案
在 Firebase 存储 API 版本 16.0.1 中。getDownloadUrl() 方法在如下使用时不起作用
download_uri = task.getResult().getDownloadUrl();
因此,我们需要使用存储引用才能使用 getDownloadUrl() 方法,如下所示:
final UploadTask uploadTask = filepath.putFile(resultUri);
uploadTask.addOnSuccessListener(new OnSuccessListener<TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
taskSnapshot.getStorage().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String download_url = uri.toString();
}
});
}
});`
推荐阅读
- excel - 如何仅在 VBA 中设置包含可见单元格的范围?
- r - 如何防止绘图轴标签被pdf导出器裁剪
- r - 忽略逗号作为 csv 文件中的千位分隔符
- ios - 由 Ad-Hoc 安装时 IPA 文件不起作用
- node.js - Passport Js + Nodejs + Expressjs,认证路由
- python - Django 多项选择字段选项取决于下拉菜单的值
- java - 当我将成功登录重定向到控制器时,在控制器中没有得到正确的路由
- r - 将多个函数应用于矩阵列表以返回数据框
- android - Retrofit2 的问题 - Android
- python-3.x - Pygame非法指令4?