java - 用 RxJava 替换异步任务

标签 java android rx-java2

我一直在尝试学习如何使用RXJava,我想知道如何更改下面的AsyncTask代码并使用RXJava,是否可以。我是 RXJava 的新手,由于 AsyncTask 已被弃用,我需要一些帮助。

 private static class AddTeamAsyncTask extends AsyncTask<Team, Void, Void> {
        private TeamDao teamDao;
         AddTeamAsyncTask(TeamDao teamDao) {
            this.teamDao = teamDao;
        }

        @Override
        protected Void doInBackground(Team... teams) {
            teamDao.addTeam(teams[0]);
            return null;
        }
    }

最佳答案

RxJava 非常简单。你可以这样写:

private void addTeamInBackground(Team team) {
    Observable.fromCallable(new Callable<Boolean>() {
        @Override
        public Boolean call() throws Exception {
            teamDao.addTeam(team);
            // RxJava does not accept null return value. Null will be treated as a failure.
            // So just make it return true.
            return true;
        }
    }) // Execute in IO thread, i.e. background thread.
        .subscribeOn(Schedulers.io())
        // report or post the result to main thread.
        .observeOn(AndroidSchedulers.mainThread())
        // execute this RxJava
        .subscribe();
}

或者你可以用 Java 8 Lambda 风格编写它:

private void addTeamInBackground(Team team) {
    Observable.fromCallable(() -> {
        teamDao.addTeam(team);
        // RxJava does not accept null return value. Null will be treated as a failure.
        // So just make it return true.
        return true;
    }) // Execute in IO thread, i.e. background thread.
        .subscribeOn(Schedulers.io())
        // report or post the result to main thread.
        .observeOn(AndroidSchedulers.mainThread())
        // execute this RxJava
        .subscribe();
}

如果您关心结果,可以在 subscribe() 方法中添加更多回调:

        .subscribe(new Observer<Boolean>() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onNext(Boolean success) {
                // on success. Called on main thread, as defined in .observeOn(AndroidSchedulers.mainThread())
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });

关于java - 用 RxJava 替换异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61283854/

相关文章:

java - 仅从 jsp 页面 onload 事件调用 servlet 页面一次

java - 在驱动程序中调用排序算法

Android 在 onPause 中保存 Activity 动态创建的布局

java - (在 Hibernate 5.1.0 中)由 : java. lang.ClassNotFoundException 引起:无法加载请求的类:MyJsonType

java - 无法连接到网址

android - 以编程方式在 ListView 中设置激活项

java - 如何使用 RxJava2 将多个单词组合成一个句子?

android - 改造后的 Rxjava2

android - 分页3 : "Not sure how to convert a Cursor to this method' s return type"when using PagingSource as return type in Room DAO

随处可用的 Java 函数(方法)(全局)