我看了相同的主题,发现没有什么可以帮助我。 所以这是我的问题。我有一个使用RecyclerView的活动。我正在使用Retrofit2库来获取新闻列表,这里是:
@GET(VERSION_V1 + "/news")
Observable<BaseResponse<NewsListResponse>> getCompanyNews(@Query("companyId") String companyId,
@Query("query") String query,
@Query("offset") Integer offset,
@Query("limit") Integer limit,
@Query("creator") NewsCreatorType creator,
@Query("date")NewsFilterType dateFilter);
我有一位主持人:
public void loadData(boolean refresh) {
mCoreServices
.getApiService()
.getApi()
.getCompanyNews(mCompanyId, "", 0, 100, mCompanyId == null ? NewsCreatorType.SYSTEM : NewsCreatorType.COMPANY, mFilterType)
.map(response -> response.getResult().getItems())
.flatMap(news -> {
if (mCompanyId == null || "".equals(mCompanyId)) {
return Observable.just(news);
} else {
return mCoreServices
.getApiService()
.getApi()
.getCompanyNews(null, "", 0, 100, NewsCreatorType.SYSTEM, mFilterType)
.map(response -> {
news.addAll(response.getResult().getItems());
return news;
});
}
})
.flatMapIterable(newsItems -> newsItems)
.map(NewsViewModel::new)
.toSortedList((news1, news2) -> news2.getDate().compareTo(news1.getDate()))
.retryWhen(errors -> retryAfterRefreshToken(errors))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(() -> {
if (refresh) {
getViewState().onShowRefresh(true);
} else {
getViewState().onShowProgressBar(true);
}
})
.doOnUnsubscribe(() -> {
if (refresh) {
getViewState().onShowRefresh(false);
} else {
getViewState().onShowProgressBar(false);
}
})
.subscribe(news -> {
mResults = news;
getViewState().onLoadNews(mResults);
}, new ApiExceptionObservable(TAG) {
@Override
public void call(String message) {
getViewState().onShowErrorMessage(message);
}
@Override
public void unauthorized() {
getViewState().showUnauthorizedDialog();
}
});
}
而且我有一个RecyclerView适配器,这是我的onBindViewHolder
:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder baseHolder, int position) {
if (baseHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) baseHolder;
NewsViewModel newsViewModel = mResults.get(position);
holder.mTVTitle.setText(newsViewModel.getTitle());
holder.mTVContent.setText(newsViewModel.getContent());
if (NewsCreatorType.SYSTEM.equals(newsViewModel.getCreator())) {
holder.mTVCreator.setText(newsViewModel.getCreator().getTitle());
} else {
holder.mTVCreator.setText(
holder.mTVCreator.getContext().getString(
newsViewModel.getCreator().getTitle(),
mCompanyTitle
)
);
}
}
}
好吧,我有2家公司在做新闻。来自公司#1的新闻不重复,来自公司#2的新闻总是重复的......我不明白我的错误在哪里。我检查(使用调试器)我的GET上的答案,它没有重复的新闻,所以我的适配器的问题我猜... 谢谢。
修改 我只从Creator.SYSTEM获得重复的新闻。
EDIT 2.0:
好的,我在演示者中删除了.flatMap
,现在它工作正常,但我无法理解它为什么存在,有人可以解释一下吗?