我正在尝试将Firebase实时数据库作为数据库连接到我的应用程序的聊天。我知道我可以通过对我的Firebase引用调用limitToLast(10)函数,将我访问的条目限制为最后10个条目。
我现在的问题是,当我这样做的时候,它会限制引用总是显示最后10个条目,即使我从我的应用程序添加更多的条目。然而,当我在我的应用程序中添加更多条目时,我希望它会被计数。例如,如果我再添加2个条目,我的聊天列表将显示12个条目,以此类推。
这是我到目前为止添加了limitToLast(10)的代码。
DatabaseReference tRef = database.getReference(getString(R.string.firebase_channel));
tRef.limitToLast(10).addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Chat c = dataSnapshot.getValue(Chat.class);
chatAdapter.newChat(c, dataSnapshot.getKey());
Log.d(TAG, "onChildAdded\t" + c.asChat());
}
@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Chat c = dataSnapshot.getValue(Chat.class);
chatAdapter.modifyChat(c, dataSnapshot.getKey());
Log.d(TAG, "onChildChanged\t" + c.asChat());
}
@Override
public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {
Chat c = chatAdapter.removeChat(dataSnapshot.getKey());
Log.d(TAG, "onChildRemoved\t" + c.asChat());
}
@Override
public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
Chat c = dataSnapshot.getValue(Chat.class);
chatAdapter.moveChat(c, dataSnapshot.getKey());
Log.d(TAG, "onChildMoved\t" + c.asChat());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "onCancelled\t" + databaseError.toException());
Toast.makeText(context, "error loading chat list", Toast.LENGTH_SHORT).show();
}
});我的想法是将聊天列表分成两个部分,一个是我在应用程序中显示的列表,另一个是连接到Firebase的列表,所以当我的应用程序中添加新条目时,我会将其添加到这两个列表中。但我真的不认为用完这些额外的内存是解决这个问题的办法。除此之外,有没有办法解决这个问题?
发布于 2019-01-12 12:19:56
如果您只想添加项,那么简单地忽略onChildRemoved如何
https://stackoverflow.com/questions/54156692
复制相似问题