gpt4 book ai didi

android - 如何过滤Livedata或Rxjava flowable

转载 作者:行者123 更新时间:2023-11-30 05:00:55 24 4
gpt4 key购买 nike

使用改造,我从服务器获取 Flowable 数据,然后在 View 模型中,我将 flowable 转换为 Livedata,最后观察 Activity 中的 LiveData。在 Activity 内部,我正在为我的 recyclerView 使用 Livedata。

但我需要根据某些条件过滤数据,并将过滤后的数据列表作为 LiveData。我如何以及在哪里做?我可以过滤实时数据吗?

我做的步骤是:

  1. 在我的MainApi 类 中:使用返回 Flowable 结果的改造调用 web 服务
public interface MainApi {
@GET("xx")
Flowable<List<User>> getUsers();
}
  1. 在我的Respository 类中:
public class MainRepository {
public Flowable<List<User>> fetchUsersFromServer() {
Flowable<List<User>> returnedData = mainApi
.getUsers()
.subscribeOn(Schedulers.io());

return returnedData;
}
}
  1. 在我的viewModel 类中:从 Repository 获取 flowable 并转换为 LiveData
public class MainViewModel extends ViewModel {
MediatorLiveData<List<User>> liveUsers = new MediatorLiveData();

public void getUsersFromServer() {

final LiveData<List<User>> source = LiveDataReactiveStreams.fromPublisher( mainRepository.fetchUsersFromServer());

liveUsers.addSource(source, new Observer<List<User>>() {
@Override
public void onChanged(List<User> users) {
liveUsers.setValue(users);
liveUsers.removeSource(source);
}
});
}
}
  1. 最后观察来自Activity 的 LiveData 并在 Recyclerview 中显示数据

最佳答案

在将其转换为 LiveData 之前,您可以在从 mainRepository.fetchUsersFromServer() 返回的可观察对象中进行过滤。

public void getUsersFromServer() {
Flowable<List<User>> usersObservable = mainRepository.fetchUsersFromServer()
.filter(new Predicate<List<User>>() {
@Override
public boolean test(List<User> users) throws Exception {
return !users.isEmpty(); // put your filter condition
}
});
final LiveData<List<User>> source = LiveDataReactiveStreams.fromPublisher(usersObservable);
liveUsers.addSource(source, new Observer<List<User>>() {
@Override
public void onChanged(List<User> users) {
liveUsers.setValue(users);
liveUsers.removeSource(source);
}
});
}

关于android - 如何过滤Livedata或Rxjava flowable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58251680/

24 4 0