サーバーからjson
形式のチャットのリストを取得します。私はそれらをクラスChatsModel
にプッシュします。このクラスにはuserId
というフィールドがあります。そのチャットにはそのユーザーのuserId
があります。ユーザーに関するその他の情報はありません。そして、タイプだから、UserMessagesResponse
flatMap演算子で正しく照会する方法は?
の利用者については、一つのフィールドはuserMessagesResponse
私はチャットリストとuserId
を得た後、私はに関する情報を取得するための別の要求を送信する必要がヌル
に等しいことを初めに、そこにありますユーザー。私はそれをこのように実行します。私は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
は何も反応しません。
質問:これを修正する方法と一般的にどのように問題を適切に解決するには?