android - 无法使用 glide 库从 firebase 存储中获取图像
问题描述
我正在尝试从 firestore 回收器适配器中的 firebase 存储中获取每个用户的个人资料图片。我正在使用 glide 库将图片加载到 imageview 上。但我得到了一个 StorageException。我之前总是使用相同的代码从 Firebase Storage 获取图片,但现在我不知道发生了什么变化。
这是我的代码:
@Override
protected void onBindViewHolder(@NonNull UsersViewHolder usersViewHolder, int i, @NonNull User user) {
FirestoreUsage.getUserPictureReference(user.getMail(), user.getGender()).child("profile_picture.jpg").getDownloadUrl()
.addOnSuccessListener(uri -> Glide.with(context).load(uri)
.into(usersViewHolder.image));
usersViewHolder.name.setText(user.getName());
usersViewHolder.city.setText(user.getCity());
}
// ONE USER STORAGE REFERENCE
public static StorageReference getUserPictureReference(String userMail, String gender) {
return getAllUsersStorageRef().child(gender).child(userMail).child("PROFILE PICTURE");
}
这是一个例外:
E/StorageException: StorageException has occurred.
Object does not exist at location.
Code: -13010 HttpResult: 404
E/StorageException: { "error": { "code": 404, "message": "Not Found. Could not get object", "status": "GET_OBJECT" }}
java.io.IOException: { "error": { "code": 404, "message": "Not Found. Could not get object", "status": "GET_OBJECT" }}
at com.google.firebase.storage.network.NetworkRequest.parseResponse(NetworkRequest.java:434)
at com.google.firebase.storage.network.NetworkRequest.parseErrorResponse(NetworkRequest.java:451)
at com.google.firebase.storage.network.NetworkRequest.processResponseStream(NetworkRequest.java:442)
at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:272)
at com.google.firebase.storage.network.NetworkRequest.performRequest(NetworkRequest.java:286)
at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:70)
at com.google.firebase.storage.internal.ExponentialBackoffSender.sendWithExponentialBackoff(ExponentialBackoffSender.java:62)
at com.google.firebase.storage.GetDownloadUrlTask.run(GetDownloadUrlTask.java:76)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
请帮我
解决方案
我找到了解决我的问题的方法。这是关于路径的。
早些时候,当我在firebase存储中注册用户的个人资料图片时,我还将图片的路径保存在firestore中。
StorageReference userProfilePicture = FirestoreUsage.getUserPictureReference(Prevalent.currentUserOnline.getMail(), gender).child("profile_picture.jpg");
userProfilePicture.putFile(uriImageSelected).addOnSuccessListener(this, taskSnapshot -> {
String pathImageSavedInFirebaseStorage = Objects.requireNonNull(taskSnapshot.getMetadata()).getPath();
choiceMap.put("profile_picture", pathImageSavedInFirebaseStorage);
Prevalent.currentUserOnline.setProfile_picture(pathImageSavedInFirebaseStorage);
然后在我的适配器中,我使用该路径创建了一个存储引用并下载了图片
StorageReference storageReference = FirebaseStorage.getInstance().getReference(user.getProfile_picture());
storageReference.getDownloadUrl().addOnSuccessListener(uri -> Glide.with(context).load(uri)
.into(usersViewHolder.image));
推荐阅读
- bash - 如何在循环中执行bash脚本,迭代将从键盘写入
- wordpress - get_field() 返回旧值
- spring - 使用 JS 以单一形式创建动态记录,并将信息存储在列表中或使用 spring mvc 设置对象
- c# - 连接到 WebAPI2 端点(路由)会为控制器抛出 Http 代码 503,而另一个控制器工作正常
- css - 如何在 html 电子邮件中添加“分享”按钮?
- reactjs - 从 JSON 生成 React 表单字段
- python - 如何将其拆分为单独的 if 语句?
- c# - 从文件路径中的特殊级别提取路径
- excel - 在大于 32767 的数字的 Excel 文件的页眉上设置初始页码
- html - 特殊字符无法在 Web 浏览器中正确显示