public MutableLiveData<List<UiMessage>> loadRemoteMessages(Conversation conversation, long fromMessageUid, int count) {
MutableLiveData<List<UiMessage>> result = new MutableLiveData<>();
ChatManager.Instance().getWorkHandler().post(() -> {
List<Integer> contentTypes = BaseUtils.getMessageContentTypesByConversation(conversation);
GetRemoteMessageCallback callback = new GetRemoteMessageCallback() {
@Override
public void onSuccess(List<Message> messages) {
if (messages != null && !messages.isEmpty()) {
insertMessages(messages);
List<UiMessage> uiMsgs = new ArrayList<>();
for (Message msg : messages) {
Log.d(TAG, "remote --- msg: id:" + msg.messageId + " msgUid: " + msg.messageUid + " type: " + msg.content.getMessageContentType());
uiMsgs.add(new UiMessage(msg));
}
result.postValue(uiMsgs);
} else {
Log.d(TAG, "remote --- msg is empty");
result.postValue(new ArrayList<>());
}
}
@Override
public void onFail(int errorCode) {
Log.e(TAG, "remote --- error: " + errorCode);
result.postValue(new ArrayList<>());
}
};
Log.d(TAG,"-------------- conversation: " + conversation.target + " fromMessageUid: " + fromMessageUid);
ChatManager.Instance().getRemoteMessages(conversation, contentTypes, fromMessageUid, count, callback);
});
以上是我实现的加载远程消息的方法,现在有一个问题需要请教一下:
- 打开一个会话窗口,我先加载本地消息,如果需要加载远程消息,那么把本地消息的最早一个条的messegeUid作为参数传入并拉取,则结果正常。
- 如果打开一个会话窗口后,没有本地消息,那么需要直接加载远程消息,此时的 fromMessageUid 为0, 以这个参数传入,拉取到的消息列表为空。
- 如果此时在该会话中发送一条消息,那么此时下拉刷新,就可以拉取到正常的远程消息。
我觉得第2点无法拉取到远程消息貌似有些问题,难道是我的参数传入不正确?还是说使用方式不对?