Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.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 Firebase数据库使用映射获取子对象的特定值_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java Firebase数据库使用映射获取子对象的特定值

Java Firebase数据库使用映射获取子对象的特定值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,问题:我正在创建一个Android应用程序,允许用户预订办公桌,并且遇到了如何从Firebase实时数据库子值检索数据的问题 我的代码目标:我想获得所有用户下所有条目的用户ID和办公桌编号,以便我可以设置已预订的办公桌,以便在我的RecyclerView桌面选择页面上显示特定的图像 我的当前代码:我的Firebase数据库为预订设置如下: { “预订”:{ “LppMaD3QPBWgMucW8k7mno7tPNu1”:{ “-L9b5LpjYz8yDwXkPUoh”:{ “预定”:对, “日期

问题:我正在创建一个Android应用程序,允许用户预订办公桌,并且遇到了如何从Firebase实时数据库子值检索数据的问题

我的代码目标:我想获得所有用户下所有条目的用户ID和办公桌编号,以便我可以设置已预订的办公桌,以便在我的
RecyclerView
桌面选择页面上显示特定的图像

我的当前代码:我的Firebase数据库为预订设置如下:

{
“预订”:{
“LppMaD3QPBWgMucW8k7mno7tPNu1”:{
“-L9b5LpjYz8yDwXkPUoh”:{
“预定”:对,
“日期”:“2018/4/19”,
“书桌”:“18”,
“用户ID”:“LppMaD3QPBWgMucW8k7mno7tPNu1”
},
“-L9B5Ijgeq58gefukza”:{
“预定”:对,
“日期”:“2018/4/13”,
“办公桌”:“14”,
“用户ID”:“LppMaD3QPBWgMucW8k7mno7tPNu1”
},
“-L9b7tcd8kJJQ-q_7UZo”:{
“预定”:对,
“日期”:“2018/4/10”,
“办公桌”:“6”,
“用户ID”:“LppMaD3QPBWgMucW8k7mno7tPNu1”
},
“-L9bCktGaluOj7Rw-7_6”:{
“预定”:对,
“日期”:“2018/4/20”,
“办公桌”:“6”,
“用户ID”:“LppMaD3QPBWgMucW8k7mno7tPNu1”
}
}

}
要解决此问题,请使用以下代码:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = rootRef.child("bookings").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String desk = ds.child("desk").getValue(String.class);
            String userId = ds.child("userId").getValue(String.class);
            Log.d("TAG", desk + " / " + userId);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
其中对应登录用户的
uid
LppMaD3QPBWgMucW8k7mno7tPNu1

输出将是:

18 / LppMaD3QPBWgMucW8k7mno7tPNu1
14 / LppMaD3QPBWgMucW8k7mno7tPNu1
6 / LppMaD3QPBWgMucW8k7mno7tPNu1
6 / LppMaD3QPBWgMucW8k7mno7tPNu1

感谢Alex的代码,但是我的问题是如何获得所有用户的预订,而不仅仅是当前用户-我上面的JSON是一个糟糕的例子,因为当时数据库中只有一个用户有预订。如果没有其他用户的uid,我不确定如何访问子数据,只需以完全相同的方式通过用户循环即可,使用getChildren()方法。是否有效?一切正常吗?您解决问题了吗?我必须执行嵌套for循环,因为bookings>uid的子对象是唯一的推送代码。一旦我循环通过子对象的子对象,我就能够获得所需的键和值。谢谢!您认为我的答案对您有帮助吗?