gpt4 book ai didi

android - 访问在 Firestore 数据库中存储为对象的数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:26:32 25 4
gpt4 key购买 nike

database structure

最近我开始测试 Firebase 新文档 db Firestore 以用于学习目的,我现在无法访问文档中作为对象存储的值。

我正在使用下面的代码访问存储在文档中的对象 Privacy,但我不确定如何访问 Key - Value?例如,我在对象中有 3 个子 Key - Value 对,我将如何单独访问和编辑它?

DocumentReference docRef = FirebaseFirestore.getInstance().collection("Users").document("PQ8QUHno6QdPwM89DsVTItrHGWJ3");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData().get("privacy"));
Object meta_object = task.getResult().getData().get("privacy");
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});

感谢任何帮助,谢谢。

最佳答案

privacy您文档中的字段可以被视为 Map<String, Boolean> ,因此您可以将此字段的值转换为这样的变量:

HashMap<String, Boolean> privacy = (HashMap<String, Boolean>) task.getResult().getData().get("privacy");

现在的主要问题是您可能会看到 "unchecked cast" compiler warning因为类型转换了一个Map这样并不理想,因为您不能保证数据库结构将始终包含 String : Boolean该字段中的值。

在这种情况下,我建议使用 custom objects to store & retrieve objects在您的数据库中,它将自动为您处理编码和转换:

DocumentReference docRef = FirebaseFirestore.getInstance().collection("Users").document("PQ8QUHno6QdPwM89DsVTItrHGWJ3");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
User user = task.getResult().toObject(User.class);
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});

你的User在哪里类是这样的:

public class User {
private String username;
private HashMap<String, Boolean> privacy;

public User() {}

public User(String username, HashMap<String, Boolean> privacy) {
this.username = username;
this.privacy = privacy;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public HashMap<String, Boolean> getPrivacy() {
return username;
}

public void setPrivacy(HashMap<String, Boolean> privacy) {
this.privacy = privacy;
}
}

在此示例中,User user = task.getResult().toObject(User.class)调用会将整个文档编码到您的 User 的一个实例中对象,然后您可以通过以下方式访问隐私 map :

HashMap<String, Boolean> userPrivacy = user.getPrivacy();

文档中的每个字段都将与自定义对象中具有相同名称的字段匹配,因此您还可以添加 settingsphoto_url领域以同样的方式。你只需要记住:

Each custom class must have a public constructor that takes no arguments. In addition, the class must include a public getter for each property.

关于android - 访问在 Firestore 数据库中存储为对象的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46885472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com