gpt4 book ai didi

android - 观察数据库的变化以更新列表

转载 作者:行者123 更新时间:2023-12-05 00:21:45 24 4
gpt4 key购买 nike

我有这个FriendRepository :

public class FriendRepository {

//return all friends from database
public Observable<Friend> getAll() {
return Observable.defer(new Func0<Observable<Friend>>() {
@Override
public Observable<Friend> call() {
//Query from database and return all friends
}
});
}

public Observable<Friend> add(Friend friend) {
//Store a new Friend to database
}

}

在我的 ListActivity ,我做这样的事情:
friendRepository.getAll().subscribe(addFriendToList());

但是,来自 Android Service也许是一个新的 Friend添加,使用 FriendRepository.add()方法。我想要 ListActivity要知道这种变化,所以我需要以某种方式发布它。我知道 PublishSubject存在,但我不知道在这种情况下如何使用它。

FriendRepository.add()方法,我会做类似的事情:
    public Observable<Friend> add(Friend friend) {
return storeFriend().doOnCompleted(new Action0() {
@Override
public void call() {
publisSubject.onNext(friend);
}
});
}

但我不知道在 FriendRepository.getAll() 中返回什么方法。

最佳答案

您需要将该发布主题存储为字段成员并将其与您的流合并以进行查询,如下所示:

public class FriendRepository {

PublishSubject<Friend> mFriendsSubject = PublishSubject.create();

//return all friends from database
public Observable<Friend> getAll() {
return Observable.defer(new Func0<Observable<Friend>>() {
@Override
public Observable<Friend> call() {
//Query from database and return all friends
}
})
.mergeWith(mPublishSubject);
}

public Observable<Friend> add(Friend friend) {
return storeFriend().doOnCompleted(new Action0() {
@Override
public void call() {
mFriendsSubject.onNext(friend);
}
});
}

}

但是以这种方式通知违反了 单一事实来源原则,因为您只通知通过您的存储库发生的更改。为了解决这个问题,我建议使用为您处理通知流的数据库包装器(Requery、Realm、SQLBrite 等。)

关于android - 观察数据库的变化以更新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com