当前位置: 首页 > 知识库问答 >
问题:

使用文件室执行删除(rxjava)

拓拔俊德
2023-03-14

在房间中,删除注释不会发出任何信息。这就是dao的样子

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

}

这使得它在做类似的事情时成为一个问题

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

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

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


            }, this::handleError);

这工作正常。但是,在订阅方法中,我现在需要访问AndroidUI来显示一个宣布成功删除的祝酒词。自然,我得到了这个异常(因为链中缺少观察)

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

然而,当我像这样放置观察

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.

共有3个答案

鲍驰
2023-03-14

替换可观察的只是方法来创建。

  Observable.create(new ObservableOnSubscribe<Object>() {
            @Override
            public void subscribe(@io.reactivex.annotations.NonNull ObservableEmitter<Object> e) throws Exception {
                e.onNext(tileDatabase.getCategoryDeo().deleteCategory(category));

            }
        })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Object>() {
                    @Override
                    public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
                    }

                    @Override
                    public void onNext(@io.reactivex.annotations.NonNull Object o) {
                        Toast.makeText(MainActivity.this, "Record deleted ", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onError(@io.reactivex.annotations.NonNull Throwable e) {
                    }

                    @Override
                    public void onComplete() {
                    }
                });
濮阳和泰
2023-03-14

我知道现在很晚了。但我遇到了同样的问题,并通过以下方法解决了它

在道课上

@Query("DELETE FROM users")
    fun deleteAllUser()

像这样称呼它。这样您就可以订阅,它将在后台运行。

Single.fromCallable {
        user.deleteAllUser() //User Dao fun
    }
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(..do stuff..)
东方宜
2023-03-14

基于此问题的信息:在后台运行Void方法(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();
 类似资料:
  • 我让troble从Laravel项目中删除一个文件。该文件位于/storage/exports目录下,它是一个使用Laravel excel库存储在磁盘上的excel。这是我的代码: 当我检查文件的存在与file_exist我得到真,所以Laravel是能够读取文件。我还检查了该文件夹的权限,我使用chmod 777给出了该文件夹的所有权限。 谢谢!

  • 问题内容: 我只想删除第三行中值为‘0’的行。数据示例如下: 因此,第一行将需要删除,而第二行将保留。 到目前为止,我所拥有的如下: 任何帮助都会很棒 问题答案: 你很亲密 目前,您将整数与进行比较,然后将其与字符串进行比较。当您从文件中读取数据时,它是一个字符串而不是整数,因此这就是您的整数检查当前失败的原因: 另外,您可以使用关键字使当前代码略显pythonic,从而减少代码中的行,并且可以省

  • 我正在使用gradle构建一个Spring Boot应用程序,我希望从war中删除文件,因为该文件将从外部加载(它运行在tomcat容器中,而不是嵌入式的)。 我查看了StackOverflow和Gradle文档,试图找出该做什么,但我不知道该绑定到哪个阶段,以及在创建war之前还是之后排除该文件。处理文件似乎也有多种方法。 我相信Maven使用作为等价物。

  • 问题内容: 我使用以下crontab记录来每天备份数据库: 我想添加另一个crontab记录,该记录将删除早于一个月的数据库转储。 有什么想法吗? 问题答案: 只需创建另一个cron: 它将查找所有早于30天的备份并将其删除。

  • 问题内容: 有没有一种方法可以对 field1 = x* 和 field2 = y的文档执行删除操作 ? *** 我看到了删除功能,但没有附带。如果使用事务,则存在get和delete,但get似乎不接受“ where”子句。 我希望我在文档中缺少一些内容。 谢谢 问题答案: 为此,您需要先创建所需的查询,然后才使用如下方法:

  • 问题内容: 假设我有一个充满昵称的文本文件。如何使用Python从此文件中删除特定的昵称? 问题答案: 首先,打开文件并从文件中获取所有行。然后以写模式重新打开文件并写回你的行,但要删除的行除外: 你需要在比较中使用换行符,因为如果文件不以换行符结尾,则最后一个line也不行。