Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:从子集合获取字段值_Java_Android_Firebase_Google Cloud Firestore - Fatal编程技术网

Java Android:从子集合获取字段值

Java Android:从子集合获取字段值,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,有没有办法从子集合中获取数据?下面是我的数据库结构,对于每个用户,“userinfo”子集合中只会创建一个文档来存储用户名和电子邮件 我正在尝试从Firestore获取“用户名”和“电子邮件”值,然后将这些值设置为字符串,如: 字符串用户名=? 字符串email= "main"(root_collection) | |=>userid1(auto-generated) |

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

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

字符串用户名=? 字符串email=

"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();
            }
        });
请帮忙,非常感谢

有没有办法从子集合中获取数据

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

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());
        }
    }
});
有没有办法从子集合中获取数据

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

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());
        }
    }
});
mary