서버에서 json
형식의 채팅 목록을받습니다. 나는 그들을 클래스 ChatsModel
으로 밀어 넣는다. 그리고이 클래스에 userId
필드가 있는데, 각 채팅에 해당 사용자의 userId
이 있습니다. 사용자에 대한 다른 정보는 없습니다. 그리고 UserMessagesResponse
flatMap 연산자에서 올바르게 쿼리하는 방법은 무엇입니까?
그래서 유형의 사용자에 대한 정보를 하나 개의 필드가 나는 채팅 목록 및 userId
있어 후 userMessagesResponse
이
널 (null)에 해당된다는 시작 부분에,이, 나는에 대한 정보를 얻기 위해 다른 요청을 보내야합니다 사용자. 나는이 방법을 수행 나는 ChatsModel
클래스의 userMessagesResponse
필드에 사용자에 대한 수신 된 정보를 밀어해야하기 때문에
private void loadChatsFromNetwork(int count, AccessDataModel accessDataModel) {
String accessToken = accessDataModel.getAccessToken();
Flowable<ChatsModel> chatsModelSingle = getChatsApi().getChats(count, accessToken, Constants.api_version)
.subscribeOn(Schedulers.io())
.flatMap(chatsModel -> {
RealmList<Item> items = chatsModel.getResponse().getItems();
StringBuilder userIds = new StringBuilder();
for (Item item : items) {
userIds.append(item.getMessage().getUserId()).append(",");
}
return loadUsersById(userIds, chatsModel);
})
.observeOn(AndroidSchedulers.mainThread());
chatsModelSingle.subscribe(chatsModel -> {
Log.d(TAG, chatsModel.getResponse().getItems().first().getMessage().getMessagesUserItem().getFirstName());
chatsRepository.updateChatsData(chatsModel);
iGetChatsCallback.onGetChatsSuccess(chatsModel);
},
throwable -> {
iGetChatsCallback.onGetChatsError(throwable.getMessage());
Log.d(TAG, "onError() " + throwable.getMessage());
});
}
private ChatsModel loadUsersById(StringBuilder userIds, ChatsModel chatsModel) {
MyApplication.getChatsApi().getUsersByChats(userIds.toString(), "photo_100")
.subscribe(messagesUser -> {
RealmList<Item> item = chatsModel.getResponse().getItems();
for (int i = 0; i < item.size(); i++) {
Message message = item.get(i).getMessage();
RealmList<UserMessagesResponse> messagesUserItemList = messagesUser.getUserMessagesResponse();
for (UserMessagesResponse messagesResponse : messagesUserItemList) {
if (messagesResponse.getUid().equals(message.getUserId())) {
message.setMessagesUserItem(messagesResponse);
chatsModel.getResponse().getItems().get(i).setMessage(message);
}
}
}
});
return chatsModel;
}
이러한 모든 활동은 flatMap
연산자의 블록에서 발생합니다. 그리고 성공한 경우 chatsModel
을 어댑터에 보냅니다.
두 요청이 모두 정확합니다. 나는 userId
목록과 사용자에 대한 정보를 얻고 있습니다.
문제는 chatsModel이 flatMap에서 반환 된 후 return chatsModel
이 발생하지 않고 아무런 변화가 없다는 것입니다. subscriber
은 어떤 식 으로든 반응하지 않습니다.
질문 : 문제를 해결하고 일반적으로 어떻게 이러한 문제를 올바르게 해결할 수 있습니까?