2017-09-22 188 views
6

我正在使用quickblox为我的android应用程序。我能够注册,登录用户,甚至添加自定义对象并从快速服务器中检索它们,但在聊天列表屏幕中我的计数出错了。指望聊天工作不正常QuickBlox

我得到的问题有未读邮件数

这里是我的代码流: -

public class ConversationFragment extends Fragment implements Observer, DialogsManager.ManagingDialogsCallbacks { 
    ConversationViewModel conversationViewModel; 
    FragmentConversationBinding binding; 
    QBChatDialogMessageListener allDialogsMessagesListener; 
    SystemMessagesListener systemMessagesListener; 
    QBSystemMessagesManager systemMessagesManager; 
    QBIncomingMessagesManager incomingMessagesManager; 
    private DialogsManager dialogsManager; 

    public ConversationFragment() { 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     binding = DataBindingUtil.inflate(inflater, R.layout.fragment_conversation, container, false); 
     getActivity().getWindow().setBackgroundDrawableResource(R.drawable.bg_img); 
     View view = binding.getRoot(); 
     systemMessagesListener = new SystemMessagesListener(); 
     dialogsManager = new DialogsManager(); 

     return view; 
    } 

    private void setUpModel() { 
     Bundle mBundle = getArguments(); 
     if (mBundle != null) { 
      conversationViewModel = new ConversationViewModel(getActivity(), binding, getArguments().getString("DialogIdData")); 
     } else { 
      conversationViewModel = new ConversationViewModel(getActivity(), binding, ""); 
     } 

     binding.setConversationViewModel(conversationViewModel); 
     setUpObserver(conversationViewModel); 

    } 


    private void setUpObserver(ConversationViewModel observer) { 
     observer.addObserver(this); 
    } 

    @Override 
    public void update(Observable o, Object arg) { 
    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     setUpModel(); 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     unregisterQbChatListeners(); 
    } 


    public void unregisterQbChatListeners() { 
     if (incomingMessagesManager != null) { 
      incomingMessagesManager.removeDialogMessageListrener(allDialogsMessagesListener); 
     } 

     if (systemMessagesManager != null) { 
      systemMessagesManager.removeSystemMessageListener(systemMessagesListener); 
     } 
     dialogsManager.removeManagingDialogsCallbackListener(this); 
    } 

    @Override 
    public void onDialogCreated(QBChatDialog chatDialog) { 
    } 

    @Override 
    public void onDialogUpdated(String chatDialog) { 

    } 

    @Override 
    public void onNewDialogLoaded(QBChatDialog chatDialog) { 

    } 

    private class SystemMessagesListener implements QBSystemMessageListener { 
     @Override 
     public void processMessage(final QBChatMessage qbChatMessage) { 
      dialogsManager.onSystemMessageReceived(qbChatMessage); 
     } 

     @Override 
     public void processError(QBChatException e, QBChatMessage qbChatMessage) { 

     } 
    } 

    private BroadcastReceiver mNotificationReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
     } 
    }; 


} 

这里是我的片段视图模型代码: -

public class ConversationViewModel extends Observable implements DialogsManager.ManagingDialogsCallbacks { 
    private static final int REQUEST_DIALOG_ID_FOR_UPDATE = 165; 
    public Context mContext; 
    FragmentConversationBinding binding; 
    private ActionMode currentActionMode; 
    public QBRequestGetBuilder requestBuilder; 
    private int skipRecords = 0; 
    private DialogsAdapter dialogsAdapter; 
    private QBChatDialogMessageListener allDialogsMessagesListener; 
    private SystemMessagesListener systemMessagesListener; 
    private QBSystemMessagesManager systemMessagesManager; 
    private QBIncomingMessagesManager incomingMessagesManager; 
    private DialogsManager dialogsManager; 
    private QBUser currentUser; 
    private String id; 

    public ConversationViewModel(Context mContext, FragmentConversationBinding binding, String Dialogid) { 
     this.mContext = mContext; 
     this.binding = binding; 
     this.id = Dialogid; 
     initUI(); 
    } 

    public void initUI() { 
     allDialogsMessagesListener = new AllDialogsMessageListener(); 
     systemMessagesListener = new SystemMessagesListener(); 
     dialogsManager = new DialogsManager(); 
     currentUser = ChatHelper.getCurrentUser(); 
     initList(); 
     registerQbChatListeners(); 
     if (QbDialogHolder.getInstance().getDialogs().size() > 0) { 
      loadDialogsFromQb(true, true); 
     } else { 
      loadDialogsFromQb(false, true); 
     } 
     if (!id.isEmpty()) { 
      loadUpdatedDialog(id); 
      id = ""; 
     } else { 
      updateDialogsList(); 
     } 
    } 

    public void initList() { 
     dialogsAdapter = new DialogsAdapter(mContext, new ArrayList<>(QbDialogHolder.getInstance().getDialogs().values())); 
     binding.listDialogsChats.setAdapter(dialogsAdapter); 
     binding.listDialogsChats.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       QBChatDialog selectedDialog = (QBChatDialog) parent.getItemAtPosition(position); 
       if (currentActionMode == null) { 
        ChatActivity.startForResult(((Activity) mContext), REQUEST_DIALOG_ID_FOR_UPDATE, selectedDialog); 
       } else { 
        dialogsAdapter.toggleSelection(selectedDialog); 
       } 
      } 
     }); 
     binding.listDialogsChats.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      @Override 
      public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       QBChatDialog selectedDialog = (QBChatDialog) parent.getItemAtPosition(position); 
       dialogsAdapter.selectItem(selectedDialog); 
       return true; 
      } 
     }); 
     requestBuilder = new QBRequestGetBuilder(); 
     binding.swipyRefreshLayout.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh(SwipyRefreshLayoutDirection direction) { 
       requestBuilder.setSkip(skipRecords += ChatHelper.DIALOG_ITEMS_PER_PAGE); 
       loadDialogsFromQb(true, false); 
      } 
     }); 


    } 

    private void loadUpdatedDialog(String dialogId) { 
     ChatHelper.getInstance().getDialogById(dialogId, new QbEntityCallbackImpl<QBChatDialog>() { 
      @Override 
      public void onSuccess(QBChatDialog result, Bundle bundle) { 
       QbDialogHolder.getInstance().addDialog(result); 
       updateDialogsAdapter(); 
      } 

      @Override 
      public void onError(QBResponseException e) { 

      } 
     }); 
    } 

    public void updateDialogsList() { 
     requestBuilder.setSkip(skipRecords = 0); 
     loadDialogsFromQb(true, true); 
    } 

    @Override 
    public void onDialogCreated(QBChatDialog chatDialog) { 
     updateDialogsAdapter(); 
    } 

    @Override 
    public void onDialogUpdated(String chatDialog) { 
     updateDialogsAdapter(); 
    } 

    @Override 
    public void onNewDialogLoaded(QBChatDialog chatDialog) { 
     updateDialogsAdapter(); 
    } 


    private void registerQbChatListeners() { 
     incomingMessagesManager = QBChatService.getInstance().getIncomingMessagesManager(); 
     systemMessagesManager = QBChatService.getInstance().getSystemMessagesManager(); 

     if (incomingMessagesManager != null) { 
      incomingMessagesManager.addDialogMessageListener(allDialogsMessagesListener != null 
        ? allDialogsMessagesListener : new AllDialogsMessageListener()); 
     } 

     if (systemMessagesManager != null) { 
      systemMessagesManager.addSystemMessageListener(systemMessagesListener != null 
        ? systemMessagesListener : new SystemMessagesListener()); 
     } 

     dialogsManager.addManagingDialogsCallbackListener(this); 
    } 


    private class SystemMessagesListener implements QBSystemMessageListener { 
     @Override 
     public void processMessage(final QBChatMessage qbChatMessage) { 
      dialogsManager.onSystemMessageReceived(qbChatMessage); 
     } 

     @Override 
     public void processError(QBChatException e, QBChatMessage qbChatMessage) { 

     } 
    } 

    private class AllDialogsMessageListener extends QbChatDialogMessageListenerImp { 
     @Override 
     public void processMessage(final String dialogId, final QBChatMessage qbChatMessage, Integer senderId) { 
      if (!senderId.equals(ChatHelper.getCurrentUser().getId())) { 
       dialogsManager.onGlobalMessageReceived(dialogId, qbChatMessage); 
      } 
     } 
    } 

    public void updateDialogsAdapter() { 
     dialogsAdapter.updateList(new ArrayList<>(QbDialogHolder.getInstance().getDialogs().values())); 
    } 

    public void loadDialogsFromQb(final boolean silentUpdate, final boolean clearDialogHolder) { 
     if (!silentUpdate) { 
      binding.progressDialogs.setVisibility(View.VISIBLE); 
     } 

     ChatHelper.getInstance().getDialogs(requestBuilder, new QBEntityCallback<ArrayList<QBChatDialog>>() { 
      @Override 
      public void onSuccess(ArrayList<QBChatDialog> dialogs, Bundle bundle) { 
       binding.progressDialogs.setVisibility(View.GONE); 
       binding.swipyRefreshLayout.setRefreshing(false); 
       if (clearDialogHolder) { 
        QbDialogHolder.getInstance().clear(); 
       } 
       QbDialogHolder.getInstance().addDialogs(dialogs); 
       updateDialogsAdapter(); 
      } 

      @Override 
      public void onError(QBResponseException e) { 
       binding.progressDialogs.setVisibility(View.GONE); 
       binding.swipyRefreshLayout.setRefreshing(false); 
       Toast.makeText(mContext, e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

这里是我的聊天活动: -

public class ChatActivity extends BindingActivity<ActivityChatBinding> implements OnImagePickedListener { 
    ChatViewModel chatViewModel; 
    public static final int REQUEST_CODE_ATTACHMENT = 721; 
    public static final String EXTRA_DIALOG_ID = "dialogId"; 

    @Override 
    protected int getLayoutId() { 
     return R.layout.activity_chat; 
    } 

    public static void startForResult(Activity activity, int code, QBChatDialog dialogId) { 
     Intent intent = new Intent(activity, ChatActivity.class); 
     intent.putExtra(ChatActivity.EXTRA_DIALOG_ID, dialogId); 
     activity.startActivityForResult(intent, code); 
    } 

    @Override 
    public void setInitBinding() { 
     getWindow().setBackgroundDrawableResource(R.drawable.bg_img); 
     chatViewModel = new ChatViewModel(this, binding); 
     binding.setChatViewModel(chatViewModel); 
    } 

    @Override 
    protected void setUpObserver() { 
     chatViewModel.addObserver(this); 
    } 

    @Override 
    public void update(Observable o, Object arg) { 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 
     super.onSaveInstanceState(outState, outPersistentState); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 
    } 

    @Override 
    public void onBackPressed() { 
     binding.getChatViewModel().releaseChat(); 
     binding.getChatViewModel().sendDialogId(); 
     super.onBackPressed(); 
    } 

    @Override 
    public void onImagePicked(int requestCode, File file) { 
     switch (requestCode) { 
      case REQUEST_CODE_ATTACHMENT: 
       binding.getChatViewModel().attachmentPreviewAdapter.add(file); 
       break; 
     } 
    } 

    @Override 
    public void onImagePickError(int requestCode, Exception e) { 
     Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show(); 
    } 

    @Override 
    public void onImagePickClosed(int requestCode) { 

    } 

} 

聊天活动视图模型: -

public class ChatViewModel extends Observable { 
    public Context mContext; 
    ActivityChatBinding binding; 
    public static final String TAG = ChatActivity.class.getSimpleName(); 
    public static final int REQUEST_CODE_ATTACHMENT = 721; 
    public static final String PROPERTY_SAVE_TO_HISTORY = "save_to_history"; 
    public static final String EXTRA_DIALOG_ID = "dialogId"; 
    public ChatAdapter chatAdapter; 
    public AttachmentPreviewAdapter attachmentPreviewAdapter; 
    public QBChatDialog qbChatDialog; 
    public ArrayList<QBChatMessage> unShownMessages; 
    public int skipPagination = 0; 
    public ChatMessageListener chatMessageListener; 
    QBPrivacyList qbPrivacyList; 
    public static boolean mBlock; 
    public static int userId, recipientId; 
    public QBPrivacyListsManager privacyListsManager; 
    public ObservableField<String> chatMessage = new ObservableField<>(""); 

    public ChatViewModel(Context mContext, ActivityChatBinding binding) { 
     this.mContext = mContext; 
     this.binding = binding; 
     Log.v(TAG, "onCreate ChaActivity on Thread ID = " + Thread.currentThread().getId()); 
     qbChatDialog = (QBChatDialog) ((Activity) mContext).getIntent().getSerializableExtra(EXTRA_DIALOG_ID); 

     Log.v(TAG, "deserialized dialog = " + qbChatDialog); 
     qbChatDialog.initForChat(QBChatService.getInstance()); 
     chatMessageListener = new ChatMessageListener(); 
     qbPrivacyList = new QBPrivacyList(); 
     privacyListsManager = QBChatService.getInstance().getPrivacyListsManager(); 
     qbChatDialog.addMessageListener(chatMessageListener); 
     initViews(); 
     initChat(); 
    } 


    public void initViews() { 
     try { 
      recipientId = qbChatDialog.getRecipientId(); 
      userId = qbChatDialog.getUserId(); 
      getPrivacyList(); 
     } catch (SmackException.NotConnectedException e) { 
      e.printStackTrace(); 
     } catch (XMPPException.XMPPErrorException e) { 
      e.printStackTrace(); 
     } catch (SmackException.NoResponseException e) { 
      e.printStackTrace(); 
     } 
     attachmentPreviewAdapter = new AttachmentPreviewAdapter(mContext, 
       new AttachmentPreviewAdapter.OnAttachmentCountChangedListener() { 
        @Override 
        public void onAttachmentCountChanged(int count) { 
         binding.attachmentContainer.setVisibility(count == 0 ? View.GONE : View.VISIBLE); 
        } 
       }, 
       new AttachmentPreviewAdapter.OnAttachmentUploadErrorListener() { 
        @Override 
        public void onAttachmentUploadError(QBResponseException e) { 
         Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
     binding.attachmentAdapter.setAdapter(attachmentPreviewAdapter); 


    } 

    public void onAttachmentsClick(View view) { 
     new ImagePickHelper().pickAnImage(((FragmentActivity) mContext), REQUEST_CODE_ATTACHMENT); 
    } 

    private void initChat() { 
     switch (qbChatDialog.getType()) { 
      case PRIVATE: 
       loadDialogUsers(); 
       break; 

      default: 
       Toaster.shortToast(String.format("%s %s", getString(R.string.chat_unsupported_type), qbChatDialog.getType().name())); 
       ((Activity) mContext).finish(); 
       break; 
     } 
    } 


    public void loadDialogUsers() { 
     ChatHelper.getInstance().getUsersFromDialog(qbChatDialog, new QBEntityCallback<ArrayList<QBUser>>() { 
      @Override 
      public void onSuccess(ArrayList<QBUser> users, Bundle bundle) { 
       String chatName = QbDialogUtils.getDialogName(qbChatDialog); 
       binding.dialogName.setText(chatName); 
       loadChatHistory(); 
      } 

      @Override 
      public void onError(QBResponseException e) { 
       Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

    public void loadChatHistory() { 
     ChatHelper.getInstance().loadChatHistory(qbChatDialog, skipPagination, new QBEntityCallback<ArrayList<QBChatMessage>>() { 
      @Override 
      public void onSuccess(ArrayList<QBChatMessage> messages, Bundle args) { 
       Collections.reverse(messages); 
       if (chatAdapter == null) { 
        chatAdapter = new ChatAdapter(mContext, qbChatDialog, messages); 
        chatAdapter.setPaginationHistoryListener(new PaginationHistoryListener() { 
         @Override 
         public void downloadMore() { 
          loadChatHistory(); 
         } 
        }); 
        chatAdapter.setOnItemInfoExpandedListener(new ChatAdapter.OnItemInfoExpandedListener() { 
         @Override 
         public void onItemInfoExpanded(final int position) { 
          if (isLastItem(position)) { 
           ((Activity) mContext).runOnUiThread(new Runnable() { 
            @Override 
            public void run() { 
             binding.listChat.setSelection(position); 
            } 
           }); 
          } else { 
           binding.listChat.smoothScrollToPosition(position); 
          } 
         } 

         private boolean isLastItem(int position) { 
          return position == chatAdapter.getCount() - 1; 
         } 
        }); 
        if (unShownMessages != null && !unShownMessages.isEmpty()) { 
         List<QBChatMessage> chatList = chatAdapter.getList(); 
         for (QBChatMessage message : unShownMessages) { 
          if (!chatList.contains(message)) { 
           chatAdapter.add(message); 
          } 
         } 
        } 
        binding.listChat.setAdapter(chatAdapter); 
        binding.listChat.setAreHeadersSticky(false); 
        binding.listChat.setDivider(null); 
       } else { 
        chatAdapter.addList(messages); 
        binding.listChat.setSelection(messages.size()); 
       } 
       binding.progressBar.setVisibility(View.GONE); 
      } 

      @Override 
      public void onError(QBResponseException e) { 
       binding.progressBar.setVisibility(View.GONE); 
       skipPagination -= ChatHelper.CHAT_HISTORY_ITEMS_PER_PAGE; 
       Toast.makeText(mContext, e.toString(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
     skipPagination += ChatHelper.CHAT_HISTORY_ITEMS_PER_PAGE; 

     QBRestChatService.markMessagesAsRead(qbChatDialog.getDialogId(), null); 

    } 


    public class ChatMessageListener extends QbChatDialogMessageListenerImp { 
     @Override 
     public void processMessage(String s, QBChatMessage qbChatMessage, Integer integer) { 
      showMessage(qbChatMessage); 
     } 
    } 

    public void showMessage(QBChatMessage message) { 
     if (chatAdapter != null) { 
      chatAdapter.add(message); 
      scrollMessageListDown(); 
     } else { 
      if (unShownMessages == null) { 
       unShownMessages = new ArrayList<>(); 
      } 
      unShownMessages.add(message); 
     } 
    } 


    public void scrollMessageListDown() { 
     binding.listChat.setSelection(binding.listChat.getCount() - 1); 
    } 

    public void onSendChatClick(View view) { 
     int totalAttachmentsCount = attachmentPreviewAdapter.getCount(); 
     Collection<QBAttachment> uploadedAttachments = attachmentPreviewAdapter.getUploadedAttachments(); 
     if (!uploadedAttachments.isEmpty()) { 
      if (uploadedAttachments.size() == totalAttachmentsCount) { 
       for (QBAttachment attachment : uploadedAttachments) { 
        sendChatMessage(null, attachment); 
       } 
      } else { 
       Toaster.shortToast(R.string.chat_wait_for_attachments_to_upload); 
      } 
     } 

     String text = binding.getChatViewModel().chatMessage.get().trim(); 
     if (!TextUtils.isEmpty(text)) { 
      sendChatMessage(text, null); 
     } 
    } 

    public void sendChatMessage(String text, QBAttachment attachment) { 
     QBChatMessage chatMessage = new QBChatMessage(); 
     if (attachment != null) { 
      chatMessage.addAttachment(attachment); 
     } else { 
      chatMessage.setBody(text); 
     } 
     chatMessage.setProperty(PROPERTY_SAVE_TO_HISTORY, "1"); 
     chatMessage.setDateSent(System.currentTimeMillis()/1000); 
     chatMessage.setMarkable(true); 

     if (!QBDialogType.PRIVATE.equals(qbChatDialog.getType()) && !qbChatDialog.isJoined()) { 
      Toaster.shortToast("You're still joining a group chat, please wait a bit"); 
      return; 
     } 

     try { 
      qbChatDialog.sendMessage(chatMessage); 

      if (QBDialogType.PRIVATE.equals(qbChatDialog.getType())) { 
       showMessage(chatMessage); 
      } 

      if (attachment != null) { 
       attachmentPreviewAdapter.remove(attachment); 
      } else { 
       binding.getChatViewModel().chatMessage.set(""); 
      } 
     } catch (SmackException.NotConnectedException e) { 
      Log.w(TAG, e); 
      Toaster.shortToast("Can't send a message, You are not connected to chat"); 
     } 
    } 

    public void leaveGroupDialog() { 
     try { 
      ChatHelper.getInstance().leaveChatDialog(qbChatDialog); 
     } catch (XMPPException | SmackException.NotConnectedException e) { 
      Log.w(TAG, e); 
     } 
    } 

    public void releaseChat() { 
     qbChatDialog.removeMessageListrener(chatMessageListener); 
     if (!QBDialogType.PRIVATE.equals(qbChatDialog.getType())) { 
      leaveGroupDialog(); 
     } 
    } 

    public void sendDialogId() { 
     Intent result = new Intent(); 
     result.putExtra(EXTRA_DIALOG_ID, qbChatDialog.getDialogId()); 
     ((Activity) mContext).setResult(RESULT_OK, result); 
    } 

    public void finishActivity(View view) { 
     ((Activity) mContext).finish(); 
    } 

    public void clickButtonBlock(View view) { 
     AppUtils.dialog(mContext); 
     if (mBlock) { 
      onClickUnblock(); 
     } else { 
      onClickBlock(); 
     } 
    } 

    public void getPrivacyList() throws SmackException.NotConnectedException, XMPPException.XMPPErrorException, SmackException.NoResponseException { 
     QBPrivacyListsManager privacyListsManager = QBChatService.getInstance().getPrivacyListsManager(); 
     QBPrivacyList privacyList = privacyListsManager.getPrivacyList("public"); 
     List<QBPrivacyListItem> items = privacyList.getItems(); 
     int i; 
     for (i = 0; i < privacyList.getItems().size(); i++) { 
      QBPrivacyListItem item = items.get(i); 
      String valueForType = item.getValueForType(); 
      String[] splitvalueType = valueForType.split("-"); 
      String blockId = splitvalueType[0]; 
      if (blockId.equalsIgnoreCase(String.valueOf(recipientId))) { 
       mBlock = true; 
       binding.tvBlock.setText("Unblock"); 
       break; 
      } else { 
       binding.tvBlock.setText("Block"); 
      } 
     } 
    } 

} 

问题是chatDialog.getUnreadMessageCount()给我算2,当我在聊天室中输入一次,回来我的聊天列表页面。

说明上的问题: -

例子: - 我已经安装在两台设备我的申请。当我从一个(设备A)发送消息到另一个设备(设备B)时,设备B将显示正确的未读计数,即1。现在,当我点击聊天对话框并进入聊天室(设备B的)时。然后回到它的列表页面,然后再尝试从设备A发送消息到设备B.这一次未读的计数为2,但它应该是一个,因为我已经看过我以前的消息。如果我尝试再次打开我的聊天室阅读邮件(设备B)并在阅读邮件后返回到我的列表页面(设备B),情况会变得更糟。这一次,如果我从设备A发送信息到设备B,然后计数出来为“5”,只是为了我的一条消息,这件事让我感到恶心,我调试了整个代码,它是chatDialog .getUnreadMessageCount()谁返回我数“5 “,我不知道为什么我以前的邮件不算作为阅读邮件,为什么每次打开聊天室时都会在未读邮件中添加一个附加号码。请帮助我,我从过去两天开始搔痒。

您的帮助将大大受到赞赏。

感谢

+0

在那里的任何机构?我需要你的帮助,问题是我每次打开我的聊天窗口时,我的未读信息会增加一个。 – Siddharth

回答

1

问题是,你的AllDialogsMessageListener是没有得到注册的;当你将打开你的聊天室屏幕。一旦你这样做,每件事都会正常工作。

这我的意思: -

binding.listDialogsChats.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       QBChatDialog selectedDialog = (QBChatDialog) parent.getItemAtPosition(position); 
       if (currentActionMode == null) { 
        unregisterQbChatListeners(); 
        ChatActivity.startForResult(((Activity) mContext), REQUEST_DIALOG_ID_FOR_UPDATE, selectedDialog); 
       } else { 
        dialogsAdapter.toggleSelection(selectedDialog); 
       } 
      } 
     }); 

private void unregisterQbChatListeners() { 
     if (incomingMessagesManager != null) { 
      incomingMessagesManager.removeDialogMessageListrener(allDialogsMessagesListener); 
     } 

     if (systemMessagesManager != null) { 
      systemMessagesManager.removeSystemMessageListener(systemMessagesListener); 
     } 

     dialogsManager.removeManagingDialogsCallbackListener(this); 
    } 

的欢呼声!

0

请使用下面这段代码:所以注销通过调用unregisterQbChatListeners()

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

     } 
    }); 
+0

他为什么要那样做? –

+0

因为当null作为messageIds的参数发送时,所有消息都被标记为已读。 –

+0

任何原因,你不能包括这些信息,我不得不要求它吗? –