gpt4 book ai didi

java - Android:从子集合中获取字段值

转载 作者:行者123 更新时间:2023-12-02 00:57:45 26 4
gpt4 key购买 nike

有没有办法从子集合中获取数据?下面是我的数据库的结构,对于每个用户,只会在“userinfo”子集合中创建一个文档来存储用户名和电子邮件。

我试图从 Firestore 获取“用户名”和“电子邮件”值,然后将这些值设置为如下字符串:

字符串用户名 = ?字符串电子邮件 = ?

"main"(root_collection)
|
|=>userid1(auto-generated)
|
|=>"userinfo"(sub-collection)=>documentID(auto)=>username: mary
| =>email:mary@gmail.com
|
|
|=>"emotions"(sub-collection)=>documentID(auto)=>happy: true
=>sad:false
=>depressed:false

我从其他问题中读到了一些其他答案,说可以使用

检索字段值
String value = documentSnapshot.getString("field");

但是我还是不知道怎么办?我写了一些东西,但我不知道如何获取值。

 FirebaseAuth mAuth = FirebaseAuth.getInstance();
String userId = Objects.requireNonNull(mAuth.getCurrentUser()).getUid();

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference userRef = db.collection("main").document(userId).collection("userinfo");

userRef.get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
@Override
public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
//get the value
String value = queryDocumentSnapshots.getDocuments("username"); // how ??
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(SettingsActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
}
});

还有一个对象类 UserInfo

import java.io.Serializable;

public class UserInfo implements Serializable {

private String email, username;

public UserInfo() {}

public UserInfo(String email, String username) {
this.email = email;
this.username = username;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getUsername() {
return username;
}

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

请帮忙,非常感谢。

最佳答案

Is there a way to get data from sub-collection?

是的,有。要获取该数据,您必须循环访问结果,如以下代码行所示:

userRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
String value = document.getString("username");
Log.d("TAG", value);
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException());
}
}
});

logcat 中的结果将是:

mary

关于java - Android:从子集合中获取字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61119106/

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