我正在使用 quickblox SDK 构建一个聊天应用程序,并希望在用户单击并查看组内消息时清除聊天对话框(群聊中的列表项)中的未读消息数。为此,我找到了这篇文章的代码,
public void updateStatusMessageReadServer(String dialogId, MessageCache messageCache,
boolean fromPrivate) throws Exception {
StringifyArrayList<String> messagesIdsList = new StringifyArrayList<String>();
messagesIdsList.add(messageCache.getId());
QBChatService.markMessagesAsRead(dialogId, messagesIdsList);
if (fromPrivate) {
QBPrivateChat privateChat = createPrivateChatIfNotExist(messageCache.getSenderId());
privateChat.readMessage(messageCache.getId());
}
}
这里的 messagecache 是一个包含有关消息的所有详细信息的 bean 类(我必须手动设置它。根据 markMessageAsRead 函数将消息标记为已读需要 MessageId。但是,我不知道从哪里获取此 message_id( messageCache.getId()),从每个对话框(组)我得到最后发送的消息(文本)和发件人 Id 但不是 messageId 并且似乎还有一个休息 API 将组内的所有消息标记为已读,其中我需要仅传递对话框 ID。请建议如何获取消息 ID(是否必须将其添加到 messagesId 列表中?)还是应该改用 rest API(不是 SDK 的一部分)?
最佳答案
我建议你使用这个方法:
QBChatService.markMessagesAsRead("YOUR_DIALOG_ID", null, new QBEntityCallback<Void>() {
@Override
public void onSuccess(Void aVoid, Bundle bundle) {
QBRequestGetBuilder requestBuilder = new QBRequestGetBuilder();
requestBuilder.eq("_id", Team.getCurrent().getChatId());
QBChatService.getChatDialogs(null, requestBuilder, new QBEntityCallback<ArrayList<QBDialog>>() {
@Override
public void onSuccess(ArrayList<QBDialog> qbDialogs, Bundle bundle) {
if (qbDialogs != null && qbDialogs.size() > 0) {
QBDialog dialog = qbDialogs.get(0);//here you get your dialog with unreadMessageCount = 0
}
}
@Override
public void onError(QBResponseException e) {
}
});
}
@Override
public void onError(QBResponseException e) {
}
});
当 null 作为 messageIds 的参数发送时,所有消息都被标记为已读。
关于android - 如何清除聊天服务器中的 quickblox 未读消息数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34850484/