首页 > 解决方案 > 无法使用 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)

请帮我

标签: androidfirebasefirebase-storage

解决方案


我找到了解决我的问题的方法。这是关于路径的。

早些时候,当我在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));

推荐阅读