gpt4 book ai didi

java - FirebaseRecyclerAdapter 中的数据库查询

转载 作者:太空宇宙 更新时间:2023-11-04 10:03:55 25 4
gpt4 key购买 nike

代码:

        FirebaseRecyclerOptions<MessagesHelper> options =
new FirebaseRecyclerOptions.Builder<MessagesHelper>()
.setQuery(mFetchingMessages, MessagesHelper.class)
.build();
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<MessagesHelper, Chat.MessagesViewHolder>(options) {

@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
holder.setMessage(model.getMessage());


final String userId = getRef(position).getKey();
final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
Query messageQuery = mTimeReference.limitToLast(10);
messageQuery.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
final String from_user = model.getFrom();
final boolean Seen = model.isSeen();
MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);

itemPos++;

if(itemPos == 1){

String messageKey = dataSnapshot.getKey();

mLastKey = messageKey;
mPrevKey = messageKey;

}


if (from_user != null && from_user.equals(MessageSenderId)) {
holder.mDisplayMessage.setBackgroundColor(Color.BLUE);
holder.mDisplayMessage.setBackgroundColor(Color.WHITE);

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.mDisplayMessage.getLayoutParams();
params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
holder.mDisplayMessage.setLayoutParams(params);
mTimeReference.keepSynced(true);


if (Seen == true) {
holder.mDisplayMessage.setBackgroundColor(Color.CYAN);
mTimeReference.keepSynced(true);

} else {
holder.mDisplayMessage.setBackgroundColor(Color.BLUE);
mTimeReference.keepSynced(true);

}
} else {
holder.mDisplayMessage.setBackgroundColor(Color.GREEN);
holder.mDisplayMessage.setTextColor(data);
mTimeReference.keepSynced(true);

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) holder.mDisplayMessage.getLayoutParams();
params.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
holder.mDisplayMessage.setLayoutParams(params);
}


messagesList.add(message);
messageList.scrollToPosition(messagesList.size() - 1);

}



@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}

@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}

@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}

@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public Chat.MessagesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.custom_activity_chat, parent, false);
return new Chat.MessagesViewHolder(view);
}
};
messageList.setAdapter(firebaseRecyclerAdapter);
firebaseRecyclerAdapter.startListening();

它获取完整数据而不是仅 10 个数据,我不明白为什么。另外,我在任何地方都使用了 keepSenced,因为每次我重新启动 Activity 时,整个事情都会再次执行......就像

enter image description here

一秒钟后,它会正确加载并显示 enter image description here

每次我重新启动 Activity 时都会发生这种情况...那么我怎样才能使 Activity 仅重新加载 10 个最新的而不是整个数据

最佳答案

So how can i make the activity just reload the 10 latest ones instead of the whole data?

您将收到所有消息,而不是仅 10 条,因为您正在向适配器传递一个包含无限制查询的 FirebaseRecyclerOptions 对象。

DatabaseReference mFetchingMessages = FirebaseDatabase.getInstance().getReference()
.child("Messages")
.child(MessageSenderId)
.child(MessageRecieverId);

要解决这个问题,您只需添加一个 .limitToLast(10) 调用,如下所示:

DatabaseReference mFetchingMessages = FirebaseDatabase.getInstance().getReference()
.child("Messages")
.child(MessageSenderId)
.child(MessageRecieverId);
.limitToLast(10)

关于java - FirebaseRecyclerAdapter 中的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53167900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com