我有这个结构:

"notifications" : {
"-KxoRpDJw6qt4kb1d4Ad" : {
  "11B Boys" : {
    "-L5QX6mvUI7Eed_FDK8R" : {
      "body" : "hello",
      "sender" : "h0ClA5VusLZMTDR6iyI4OAjLzm43",
      "title" : "hi"
    }
  },
  "All" : {
    "-L5QB_D6n_G8B5si5zMd" : {
      "body" : "d5d5",
      "sender" : "h0ClA5VusLZMTDR6iyI4OAjLzm43",
      "title" : "d5f6"
    },
    "-L5QBj31bF5On3xOIiM9" : {
      "body" : "hfhfy",
      "sender" : "h0ClA5VusLZMTDR6iyI4OAjLzm43",
      "title" : "gdgdhc"
    }
  }


我的问题是onDataChange正确返回了第一条通知(与“ hello”正文和“ hi”标题混为一谈),其他消息返回得不好(它们的键被成功返回),但是似乎将它们视为null。

这是代码:

           final String notificationDetails[] = token.split(";");
    ValueEventListener valueEventListener = new ValueEventListener() {
         @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                tvTitle.setText(dataSnapshot.child("title").getValue(String.class));
                tvBody.setText(dataSnapshot.child("body").getValue(String.class));

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    } ;
                                                                    // school_id->topic->notification_id
    FirebaseDatabase.getInstance().getReference("notifications").child(notificationDetails[0]).child(notificationDetails[1])
    .child(notificationDetails[2]).addValueEventListener(valueEventListener);

最佳答案

找到了我自己的答案,我不知道为什么,但是当使用setValue()插入条目时,我必须一次发送整个节点。

插入:

ref.setValue(obj); // of type notification


代替:

ref.child("title").setValue("my title");
ref.child("body").setValue("my body");

关于android - Firebase数据库onDataChange有时无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48819407/

10-09 01:02