如何根据嵌套json对象中某个键的值从Firebase检索数据

时间:2018-10-17 06:00:37

标签: android firebase firebase-realtime-database

在Firebase数据库中,我的帖子具有这种结构。

"posts" : {
"-LP-UfzuUHFJOkY0Ogb9" : {
  "dislikeCount" : "0",
  "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/privato-dfb2c.appspot.com/o/images%2F2309fdab-0d78-44e5-af1f-8d256efdf6fd.jpg?alt=media&token=1276804f-d48c-4e06-8982-309fd539a397",
  "likeCount" : "0",
  "postByUser" : {
    "aboutMe" : "death is inevitable",
    "countryCode" : "+91",
    "imageUrl" : "https://i.imgur.com/hAazykl.jpg",
    "mobileNumber" : "number",
    "name" : "Sid",
    "userName" : "deathcode"
  },
  "timeStamp" : 1539754082148,
  "title" : "This is cool, lowest price ever on grocers.",
  "type" : 3
}
}

现在,我需要根据json对象对象“ postByUser”下userName的值来检索某些用户的所有帖子。 我遵循某些指南来解决此问题,但是所有指南都使用

在根发布项下的json键值上,而不是在发布项下的另一个json对象下工作。
 Query query = dbRef.child("posts").orderByChild("title").equalTo("sometitle");

但是我如何将其用于嵌套的json对象?

2 个答案:

答案 0 :(得分:1)

您可以将路径传递到 public void <T> T[] createNewArrayOfClass(Class<T> clazz, int length){ return (T[]) java.lang.reflect.Array.newInstance(clazz, length); } ,所以:

orderByChild

答案 1 :(得分:0)

使用orderByChild()查询及其dataSnapshot后,您可以获得所有同级子值。

此代码如下所示:

//ref is the correct database reference to your firebase database

ref.orderByChild("userName").equalTo(userNameYouWant).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        for (DataSnapshot ds: dataSnapshot.getChildren()) {
            String aboutMe = ds.child("aboutMe").getValue(String.class);
        }

                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

您可以使用相同的方法检索其他同级节点值。