【发布时间】:2018-01-01 19:03:17
【问题描述】:
addValueEventListener 会在数据库中发生更改时提供所有数据,因此我已实现 addChildEventListener 以在数据库中有新内容时获取唯一的新项目。
目前,我面临的问题是每当我打开应用程序时,addChildEventListener 在onChildAdded 方法中一一获取所有项目。
有什么方法可以只获取 Firebase 实时数据库中的新项目?这是我的代码:
mDatabase.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
News news = dataSnapshot.getValue(News.class);
Log.i("YES-onChildAdded", news.getId()+"/"+news.getHeadline());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
News news = dataSnapshot.getValue(News.class);
Log.i("YES-onChildChanged", news.getId()+"/"+news.getHeadline());
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
News news = dataSnapshot.getValue(News.class);
Log.i("YES-onChildRemoved", news.getId()+"/"+news.getHeadline());
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
News news = dataSnapshot.getValue(News.class);
Log.i("YES-onChildMoved", news.getId()+"/"+news.getHeadline());
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("YES-Cancelled", databaseError.getMessage());
}
});
【问题讨论】:
-
任何侦听器都会在您附加它时立即检索它指向的所有数据,然后在侦听器保持附加时进行任何更改。没有办法改变这种行为。如果您想要“仅新”数据,则必须定义“新”的含义。例如。如果它是某个时间戳之后的数据,则在查询中包含该时间戳。另请参阅我刚才在这里留下的评论中的链接:stackoverflow.com/questions/48049476/…
标签: android firebase firebase-realtime-database