首页 > 解决方案 > 更新个人资料图片时更改图片网址

问题描述

我正在使用 firebase 构建一个 android 应用程序。该应用程序有用户,这些用户有个人资料图像。用户可以对帖子点赞、创建和评论。我目前有一个数据结构,其中用户 ID、名称和下载图像 URL 都保存在用户创建的帖子、点赞对象和评论对象中。我这样做是因为我不想在每次有评论或帖子时查询用户对象只是为了显示名称和个人资料图像。这意味着如果有 30 个帖子并且每个帖子由不同的人发布,我将不得不查询所有 30 个用户以获得名称和图像 url。我现在遇到的问题是每次用户更新该图像时,我都必须查看并找到他们所做的所有评论、帖子和喜欢,并使用新的下载网址更新这些内容。

这是我的帖子对象

public class Post implements Parcelable {

    private String postId;
    private String title;
    private String body;
    private CreatedBy createdBy;
    private String parentId;
    @ServerTimestamp
    private Date createdAt;
    private Date updatedAt;

    public Post(){

    }
}

和对象创建的

Public class CreatedBy implements Parcelable {
    private String id;
    private String name;
    private String imageUrl;
    private CreatorType creatorType;

}

标签: androiddatabasefirebasefirebase-realtime-database

解决方案


实际上非常简单,您只需Task使用用户的路径侦听并更新实时数据库。

onActivityResult()获取一些数据后,您可能会插入图像。

// uploadTask is StorageReference's task
uploadTask.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle unsuccessful uploads
    }
}).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
    @Override
    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
        // taskSnapshot.getMetadata() contains file metadata such as size, content
        taskSnapshot.getDownloadUrl();
        // Update the users node in Realtime Database with the URL
        // If you're using image loading library like Glide it should update
        // automatically
    }
});

推荐阅读