繁体   English   中英

未从 Firebase 数据库检索数据

[英]Data not retrieving from Firebase database

在此处输入图片说明

我有一个 Firebase 数据库,如图所示。 我试图根据某些条件检索数据,但没有显示任何结果。

    DbRef2 =FirebaseDatabase.getInstance().getReference().child("Notification");

    DbRef2.child("45961").orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()){
                Toast.makeText(getApplicationContext(),"hello",Toast.LENGTH_SHORT).show();
                Notification notf = dataSnapshot.getValue(Notification.class);
                Toast.makeText(getApplicationContext(),"hai"+notf.getFromId(),Toast.LENGTH_SHORT).show();
            }
        }

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

        }
    });

吐司中没有任何显示。 我也尝试过 equalTo 而不是 startAt。 但没有结果。

您的代码中有四个问题。 第一个是您正在使用的查询。 如果您想根据条件获取结果,请更改以下查询:

DbRef2.child("45961").orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(/* ... */);

到:

DbRef2.orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(/* ... */);

不需要.child("45961")调用,因为您需要遍历结果。

第二个问题是您将DataSnapshot对象作为参数获取,但您没有循环获取结果。 要实际获得结果,您应该使用以下代码:

@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()){
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Toast.makeText(getApplicationContext(),"hello",Toast.LENGTH_SHORT).show();
            Notification notf = ds.getValue(Notification.class);
            Toast.makeText(getApplicationContext(),"hai"+notf.getFromId(),Toast.LENGTH_SHORT).show();
        }
    }
}

第三个问题是您没有检查潜在错误。 您还可以考虑使用:

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
    Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}

第四个问题在于您使用的名称以大写开头。 为此,我建议您从以下帖子中查看我的回答:

Firebase Android ListView 未显示

或者:

如何读取 firestore 子集合并将其传递给 FirestoreRecyclerOptions

如果您班级中的字段是小写的。

改变这个:

 DbRef2.child("45961").orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(new ValueEventListener() {

进入这个:

DbRef2.orderByChild("FromId").startAt("22222").addListenerForSingleValueEvent(new ValueEventListener() {

如果你想在orderByChild()使用FromId那么你不需要访问child("45961")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM