可流动且不返回更改

时间:2019-10-03 16:06:23

标签: android firebase rx-java2 android-room

我需要侦听本地数据库(房间)中的更改,因此,我正在使用flowable获取表列表并在表的任何行中侦听更改,但是,这不会返回并侦听我的数据库中的更改。

@Query("SELECT * FROM messages_chat")
Flowable<List<MessagesChat>> getMessagesChat();



public Flowable<List<MessagesModel>> getMessages() {

    return appDataBase.messageDao().getMessagesChat().map(new Function<List<MessagesChat>, List<MessagesModel>>() {
        @Override
        public List<MessagesModel> apply(List<MessagesChat> messagesChats) throws Exception {
            return ChatMapper.transformDataBaseToMessageModel(messagesChats);
        }
    });

}



public class GetMessagesChat extends UseCaseFlowable<List<MessagesModel>, Void> {

    private final ChatRepository repository;

    @Inject
    public GetMessagesChat(ChatRepository repository) {
        this.repository = repository;
    }


    @Override
    Flowable<List<MessagesModel>> buildUseCaseObservable(Void aVoid) {
        return repository.getMessages();
    }
}


abstract class UseCaseFlowable<T, Params> {

    private final CompositeDisposable disposables;

    UseCaseFlowable() {
        this.disposables = new CompositeDisposable();
    }

    /**
     * Builds an {@link Flowable} which will be used when executing the current {@link UseCaseFlowable}.
     */
    abstract Flowable<T> buildUseCaseObservable(Params params);


    public void execute(DisposableSubscriber<T> observer, Params params) {

        final Flowable<T> flowable = this.buildUseCaseObservable(params)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());

        addDisposable(flowable.subscribeWith(observer));
    }


    /**
     * Dispose from current {@link CompositeDisposable}.
     */
    public void dispose() {
        if (!disposables.isDisposed()) {
            disposables.dispose();
        }
    }

    /**
     * Dispose from current {@link CompositeDisposable}.
     */
    private void addDisposable(Disposable disposable) {
        disposables.add(disposable);
    }
}


@Override
public void getMessages(String idChat) {
    interactorGetMessagesChat.execute(new ObserverMessagesChat(), null);
}



public class DefaultFlowable<T> extends DisposableSubscriber<T> {



    @Override
    public void onNext(T t) {

    }

    @Override
    public void onError(Throwable t) {

    }

    @Override
    public void onComplete() {

    }
}




private final class ObserverMessagesChat extends DefaultFlowable<List<MessagesModel>> {




    @Override
    public void onNext(List<MessagesModel> messages) {
        super.onNext(messages);
        ChatPresenter.this.listMessages(messages);
    }

    @Override
    public void onComplete() {
        super.onComplete();
    }

    @Override
    public void onError(Throwable exception) {
        super.onError(exception);
    }
}

但更新表时不返回任何更改。

0 个答案:

没有答案