2017-09-22 16 views
6

Tôi đang sử dụng quickblox cho ứng dụng Android của mình. Tôi có thể đăng ký, đăng nhập người dùng, thậm chí thêm các đối tượng tùy chỉnh và lấy chúng từ máy chủ nhanh chóng-blox, nhưng trong màn hình danh sách trò chuyện số của tôi là đến sai.đếm trên trò chuyện không hoạt động chính xác QuickBlox

Tôi nhận được vấn đề với số lượng chưa đọc

Đây là dòng mã của tôi: -

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


} 

Đây là mã Fragment ViewModel của tôi: -

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(); 
      } 
     }); 
    } 
} 

đây là Hoạt động Trò chuyện của tôi: -

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

    } 

} 

Trò chuyện Xem hoạt động Mẫu: -

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"); 
      } 
     } 
    } 

} 

Vấn đề là chatDialog.getUnreadMessageCount() đem lại cho tôi đếm 2 khi tôi một lần nhập vào phòng chat và trở lại danh sách trò chuyện của tôi trang .

Mô tả về vấn đề: -

Ví dụ: - Tôi đã cài đặt ứng dụng của tôi trong hai thiết bị. khi tôi gửi tin nhắn từ một thiết bị (Thiết bị A) đến thiết bị khác (Thiết bị B). Thiết bị B sẽ hiển thị số lượng Chưa đọc chính xác, tức là 1. Bây giờ khi tôi nhấp vào hộp thoại trò chuyện và được nhập vào bên trong phòng trò chuyện (của Thiết bị B). và trở lại trang danh sách của nó và sau đó lại cố gắng gửi tin nhắn từ thiết bị A đến thiết bị B. Lần này số lượng chưa đọc đến là 2 nhưng nó phải là một như tôi đã xem tin nhắn trước đây của tôi. Điều này trở nên tồi tệ hơn nếu tôi cố gắng mở lại phòng trò chuyện của mình để đọc tin nhắn (Thiết bị B) và trở lại trang danh sách của tôi (Thiết bị B) sau khi đọc tin nhắn. Lần này nếu tôi gửi tin nhắn từ thiết bị A đến thiết bị B, thì số đếm xuất hiện dưới dạng "5" chỉ cho một thông điệp của tôi, điều này khiến tôi bị bệnh, tôi đã sửa toàn bộ mã, đó là số chatDialog .getUnreadMessageCount(). ", Tôi không biết tại sao tin nhắn trước đây của tôi không được tính là tin nhắn đã đọc và tại sao mỗi khi tôi mở phòng trò chuyện, một số bổ sung được thêm vào bên trong số chưa đọc. Vui lòng giúp tôi, tôi đang gãi đầu trong hai ngày qua .

Trợ giúp của bạn sẽ được đánh giá rất cao.

Cảm ơn

+0

Có cơ thể nào không? tôi cần sự giúp đỡ của bạn, vấn đề là số lượng tin nhắn chưa đọc của tôi tăng dần mỗi lần tôi mở cửa sổ trò chuyện của mình. – Siddharth

Trả lời

1

Vấn đề là AllDialogsMessageListener bạn không nhận được đăng ký để unregister nó bằng cách gọi unregisterQbChatListeners(); khi bạn sẽ mở màn hình phòng trò chuyện của mình. Mọi thứ sẽ hoạt động tốt một khi bạn làm điều đó.

này những gì tôi có nghĩa là: -

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); 
    } 

cổ vũ !!!

0

Vui lòng sử dụng mã này dưới đây:

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

tại sao anh ấy lại làm vậy? –

+0

bởi vì Khi null được gửi dưới dạng tham số cho messageIds, tất cả thư được đánh dấu là đã đọc. –

+0

bất kỳ lý do nào bạn không thể bao gồm thông tin đó mà không cần phải yêu cầu? –

Các vấn đề liên quan