gpt4 book ai didi

android - 执行删除房间(rxjava)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:53:06 34 4
gpt4 key购买 nike

在 room 中,@Delete 注释不会发出任何内容。这就是 dao 的样子

@Dao
public interface UserDao {
@Delete
void deleteUser(User user);
//We can't use Maybe or Single or anything here

}

这使得在做类似的事情时出现问题

userRepository.deleteUser().subscribeOn 因为我们没有来自 dao 的发射。我使用以下代码在后台线程上调用 deleteUser。

Observable.just(appDatabase).
subscribeOn(SchedulerProvider.getInstance().computation()).

subscribe(db -> {
userRepository.logoutUser(loggedUser.getLoggedInUser());
loggedUser.setLoggedInUser(null);


}, this::handleError);

这很好用。但是,在订阅方法中,我现在需要访问 Android UI 以显示一个 toast,宣布删除成功。自然地,我得到了这个异常(因为链中缺少 observeOn)

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

但是当我像这样放置observeOn

Observable.just(appDatabase).
subscribeOn(SchedulerProvider.getInstance().computation()).
observeOn(SchedulerProvider.getInstance().ui()).
subscribe(db -> {
userRepository.logoutUser(loggedUser.getLoggedInUser());
loggedUser.setLoggedInUser(null);

Message message = new Message(R.string.user_logged_out_msg);
message.setMessageType(Message.MessageType.SUCCESS_MESSAGE);
view.showMessages(Arrays.asList(message)); //this leads to a taost

}, this::handleError);

我奇怪地得到这个异常:

cannot access database on the main thread since it may potentially lock the UI for a long period of time.

最佳答案

基于这个问题的信息:Run Void Method in Background (StackOverflow)

像这样使用 Completable 并订阅另一个线程:

Completable.fromAction(this::clearCachedData)
.subscribeOn(Schedulers.io())
.subscribe();

为我工作。 clearCachedData 方法在我调用的 Room 中执行查询。

我的查询是:

/**
* Delete all data in the items table.
*/
@Query("DELETE FROM items")
void deleteWeatherItems();

关于android - 执行删除房间(rxjava),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47921312/

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