gpt4 book ai didi

android - 更新客户端中的 recyclerview 项目 ui 以指示服务器上的 Firebase 数据库已更新

转载 作者:搜寻专家 更新时间:2023-11-01 08:32:01 26 4
gpt4 key购买 nike

我正在使用 Firebase 实时数据库构建一个聊天应用。我想实现像 WhatsApp 这样的功能,用户可以在没有互联网的情况下发送消息(在 RecyclerView 上添加消息对象)但会有时钟图标(显示消息不是已发送)。

当 Firebase 数据库收到消息时(用户设备连接到互联网并且 Firebase 发送消息),我想更新 recyclerview 上添加的元素(更改时钟图标用于正面图标)。

我尝试了什么?我有那个

mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
mFirebaseAdapter = new ChatFirebaseAdapter(mFirebaseDatabaseReference.child("chat_id"), user.getId());
recyclerChat.setLayoutManager(mLinearLayoutManager);
recyclerChat.setAdapter(mFirebaseAdapter);

我的适配器从 firebase-ui-database 扩展了 FirebaseRecyclerAdapter

我试图在我的 DatabaseReference 上添加一个 addChildEventListener,在那里我得到了新元素的 dataSnapshot,但我不知道如何在 recyclerview 上获得正确的位置。

mFirebaseDatabaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
UPDATE RECYCLERVIEW ITEM
}

@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) {

}
});

我在添加新消息时添加了一个onCompletionListener,但我不知道如何再次获得正确的位置。

mFirebaseDatabaseReference.push().setValue(message, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError == null) {
UPDATE RECYCLERVIEW ITEM
}
}
});

有人知道为什么我无法完成吗?谢谢。我在询问之前进行了很多搜索,但没有找到正确的答案。

最佳答案

您的问题的解决方案在于添加一个可以设置为 truedelivered bool 值,一旦您从 onCompletionListener 中的代码收到成功的推送 ID,那么您需要做的是将此 bool 值设置为特定的推送 ID。

现在在你的 android 客户端上你的 firebase ui 你可以检查这个 bool 值是否设置为 true 并相应地改变回收器 View 项目的状态。这个解决方案会起作用,因为 firebase 数据库是实时的.

//设置 bool 值 onComplete

mFirebaseDatabaseReference.push().setValue(message, new DatabaseReference.CompletionListener() { @Override public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) { if (databaseError == null) { databaseReference.child("delivered").setValue(true); } } });

对于 whatsapp、Messenger 等聊天应用程序,如果不使用 firebase 作为后盾,您将采用另一条消息传递途径。我不在这里讨论,因为它超出了提问的范围。

关于android - 更新客户端中的 recyclerview 项目 ui 以指示服务器上的 Firebase 数据库已更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727488/

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