【问题标题】:Problem retrieve similar child element of firebase问题检索firebase的类似子元素
【发布时间】:2020-01-22 01:57:37
【问题描述】:

我想一次只检索日期和所有日期元素,并将它们存储在 firebase 中的数组中,如下所示。

我已使用以下代码检索但未能成功。

    public void showData(View view) {

    final ArrayList<String> date = new ArrayList<>();
    firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Date");

    firebaseDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            date.add(dataSnapshot.getValue().toString());
            display.setText(dataSnapshot.getValue().toString());
        }

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

        }
    });
}

请帮助找到解决方案。

【问题讨论】:

  • 您提供的路径不正确,您缺少 2 个节点。应该是 FirebaseDatabase.getInstance().getReference().child("Name").child(actual_name).child("Date");
  • 这个问题没有解决。
  • 一种方法是,您必须将参考设置为“名称”节点,然后您必须手动遍历“日期”。
  • @RanjitVamadevan 确实将答案标记为正确并投票,这有助于堆栈溢出读者,我也很感激。干杯! :)

标签: java android firebase firebase-realtime-database


【解决方案1】:

firebase 引用错误,你应该从顶部节点到日期节点。

改变这个:

firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Date");

进入这个:

firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Name");
 firebaseDatabase.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
       for(DataSnapshot datas: dataSnapshot.getChildren()){
        date.add(datas.child("Date").getValue().toString());
           }
    }

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

    }
});

既然你想获得 all Date,那么将 firebase 引用放在节点 Name 并在名称内循环以便能够检索所有日期。


如果你想获取一个用户示例Ravi的日期,那么你不需要循环,你可以这样做:

firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Name").child("Ravi").child("Date");

firebaseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    date.add(dataSnapshot.getValue().toString());
       }
}

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

    }
 });

【讨论】:

  • @RanjitVamadevan 有什么问题?还有哪种方式,因为我给出了两种检索方式
  • 我想要第一种方式的答案,但它似乎不起作用。
  • 我想检索数据,即。我的应用程序中 onclick 事件的“日期”。你能告诉我 onclick 事件的事件监听器吗?
【解决方案2】:

正如@PeterHaddad 在上一个答案中所说,访问您获取的数据的顺序不正确。如果在此之前没有其他帮助,您可以尝试这种方式。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("Names").orderByChild("Date").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
       for(DataSnapshot ds: dataSnapshot.getChildren()){
        date.add(ds.getValue(String.class));
           }
    }

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

    }
});

//Also as you've told that code is not working, please tell, what exactly is not working

【讨论】:

  • 你能告诉更多,你到底想用这个做什么?代码到底出了什么问题?
  • 你给了我正确的解决方案,我认为代码有问题。你能检查一下吗?
  • 我已经创建了apk,但是运行时它崩溃了。
  • @RanjitVamadevan 确实将答案标记为正确并投票,这有助于堆栈溢出读者,我也很感激。干杯! :)
猜你喜欢
  • 2016-03-26
  • 1970-01-01
  • 2020-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多