java - 为什么我不能在 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();
}
}
解决方案
如果您的错误消息是:
对象在该位置不存在
那么这意味着您尝试下载的对象根本不存在。这是您用于构建该位置的代码:
final StorageReference fileReference = storageReference
.child(System.currentTimeMillis() + "." + getFileExtension(imageUri));
因此,您似乎正在尝试使用与当前时间匹配的名称来获取应该存在的文件。我怀疑这几乎永远不会奏效。由于我们看不到您的存储桶的内容,而且我们不知道您在此处传递的确切字符串,因此不知道如何解决此问题。您的代码应仅获取其名称存在于存储桶中的对象。
推荐阅读
- vue.js - Vue:如何以正确的方式迭代更新道具中的属性
- java - 如何在警报管理器中满足预定时间列表以推送通知
- testing - 协议消费者测试是否仅用于生成合同 json 文件?
- java - 使用耳内反射改变静态场
- r - mutate_impl(.data, dots) 中的错误:评估错误:对于 Date 类的索引,只允许使用年、季度、月、周和日期间
- android - onCreate 时为 Sqlite 赋予初始值
- java - 正则表达式忽略标签之间的一个词
- git - 如何拉取(由另一个人)在当前分支上所做的更改?
- selenium - 无论如何在 Selenium Webdriver 或 Katalon Studio 中测试 Web 表的排序功能?
- c# - 我有一些登录问题!想要一些建议 C#