Android 如何清除聊天服务器中的quickblox未读邮件计数?

Android 如何清除聊天服务器中的quickblox未读邮件计数?,android,chat,quickblox,quickblox-android,Android,Chat,Quickblox,Quickblox Android,我正在使用quickblox SDK构建一个聊天应用程序,希望在用户单击并查看组内的消息时清除聊天对话框(组聊天中的列表项)中的未读消息计数。为此,我找到了这段代码 public void updateStatusMessageReadServer(String dialogId, MessageCache messageCache, boolean fromPrivate) throws Exception

我正在使用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());
    }
}
public void updateStatusMessageReadServer(字符串对话框ID、MessageCache、MessageCache、,
boolean fromPrivate)引发异常{
StringifyArrayList messagesIdsList=新建StringifyArrayList();
messagesIdsList.add(messageCache.getId());
markMessagesAsRead(dialogId,messagesIdsList);
if(来自private){
QBPrivateChat privateChat=createPrivateChatIfNotExist(messageCache.getSenderId());
privateChat.readMessage(messageCache.getId());
}
}

这里messagecache是一个bean类,包含关于消息的所有详细信息(我必须手动设置。将消息标记为read需要根据markMessageAsRead函数使用MessageId。但是,我不知道从何处获取消息id(messagecache.getId()),从我最后发送的消息(文本)的每个对话框(组)中和发件人Id,但不是messageId,而且似乎有一个rest 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) {

        }
    });
QBChatService.markMessagesAsRead(“您的对话ID”,null,新的QBEntityCallback(){
@凌驾
成功时公开作废(作废避免、捆绑){
QBRequestGetBuilder requestBuilder=新的QBRequestGetBuilder();
eq(“_id”,Team.getCurrent().getChatId());
getChatDialogs(null、requestBuilder、新的QBEntityCallback(){
@凌驾
成功时公共无效(ArrayList qbDialogs、Bundle){
if(qbDialogs!=null&&qbDialogs.size()>0){
QBDialog dialog=qbDialogs.get(0);//在这里,您可以获得未读消息计数为0的对话框
}
}
@凌驾
公共无效报告人(QBResponseException e){
}
});
}
@凌驾
公共无效报告人(QBResponseException e){
}
});
将null作为MessageID的参数发送时,所有消息都标记为已读。

此“QBChatService.MarkMessagesRead”不再可用。是否有其他选择?chatDialog.readMessage(chatMessage);似乎不起作用。