标签: rx-java2

通过改造和rxjava 2.x处理空响应

当使用rxjava 1.xi用于返回Observable<Void>处理来自改造的空响应时:

@POST( "login" )
Observable<Void> getToken( @Header( "Authorization" ) String authorization,
                                       @Header( "username" ) String username,
                                       @Header( "password" ) String password );
Run Code Online (Sandbox Code Playgroud)

但是因为rxjava 2.x不会发出任何东西,Void是否有任何好的做法来处理那些空的响应?

android rx-java rx-java2

21
推荐指数
2
解决办法
7051
查看次数

反应式编程优点/缺点

我一直在研究并尝试使用Reactor和RxJava进行编码的Reactive Style.我确实理解,与单线程执行相比,反应式编码可以更好地利用CPU.

在基于Web的应用程序中,反应式编程与命令式编程之间是否有任何具体比较?

通过对非反应式编程使用反应式编程,我实现了多少性能提升和吞吐量?

还原反应编程有哪些优缺点?

有没有统计基准?

java reactive-programming project-reactor microservices rx-java2

21
推荐指数
3
解决办法
1万
查看次数

RxJava flatMapIterable with Single

我正在尝试整理我的代码,并且Single看起来对我来说是一个不错的选择,因为我正在做一些只能发出一个结果的东西.

我遇到了一个问题,因为我以前使用flatMapIterable我的回复(列表)并对每个项目做一些事情.我没有看到我如何用Single实现这个目标.

getListOfItems()
.flatMapIterable(items -> items)
.flatMap(item -> doSomethingWithItem())
.toList()
Run Code Online (Sandbox Code Playgroud)

如果能正常工作getListOfItems是返回一个Observable,但如果我试图使它返回Single,那么我不能这样做flatMapIterable,不能看到另一种,任何想法?

android rx-android rx-java2

21
推荐指数
3
解决办法
1万
查看次数

在RxJava中处理Completable,Single,Maybe和终止Observable的最佳实践

我从Android的角度来问这个问题,但这应该适用于RxJava.

作为最佳实践,应我的观点始终处分甚至短暂的Completable,Single,Maybe和终止Observable的Rx类型应该在短期内结束,但是当用户关闭该视图可以仍在执行?我知道当Rx链终止时,它会被丢弃,但这可能会在视图关闭后的某个时候发生.

例如,Single正在执行HTTP GET.调用将完成,但可能是在视图被破坏后,暂时阻止垃圾回收.

如果a CompositeDisposable用于Disposable长期观察收集这些s,我会认为应该注意clear()Disposable定期删除这些s以防止无限大小的增长CompositeDisposable

android dispose rx-java rx-java2

20
推荐指数
2
解决办法
9428
查看次数

doAfterTerminate和doFinally之间的区别

有人知道RxJava 2中运算符"doAfterTerminate"和"doFinally"之间的区别是什么?

java rx-java2

20
推荐指数
1
解决办法
5417
查看次数

有没有类似Single.empty()的东西

我正在从Rx 1迁移到Rx 2,突然在阅读帖子时我发现Single应该是用于改装调用的可观察类型.

所以我决定尝试一下,在将我们的改装调用迁移到Rx 2时,我也将返回值更改为Single<whatever>.

现在的问题是,我们的一些测试模拟网络服务类似于:

when(userService.logout()).thenReturn(Observable.empty())
Run Code Online (Sandbox Code Playgroud)

正如您在迁移调用之前所看到的那样,我们过去只是通过告诉userServicemock返回一个空的observable 来完成流.

在迁移到Single调用的"版本"时,我们不再使用,Observable.empty()因为调用不返回Observable,但返回a Single.

我最终做了类似的事情:

when(userService.logout()).thenReturn(
                    Single.fromObservable(Observable.<whatever>empty()))
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 有没有更好的方法呢?
  2. 我错过了一些我应该知道的重要事情 - 这样的事情实际上并不像我期望的那样.

java rx-java rx-java2

19
推荐指数
2
解决办法
1万
查看次数

无法使用TestSubscriber订阅RxJava 2 Observable

为什么我的编译器不允许自己使用TestSubscriber订阅Observable?

这是我的代码:

TestSubscriber<User> testSubscriber = new TestSubscriber<>();
Observable.just(new User()).subscribe(testSubscriber);
Run Code Online (Sandbox Code Playgroud)

并且它说它无法解决subscribe采用此参数的方法.但是在所有RxJava测试教程中,他们都使用TestSubscriber而没有这些问题.我该怎么做才能测试这样的Observable?

android rx-java2

19
推荐指数
2
解决办法
2699
查看次数

Paging3:在 Room DAO 中使用 PagingSource 作为返回类型时,“不确定如何将 Cursor 转换为该方法的返回类型”

我试图为新的 Paging 3 库模仿 Google 的 codelab,当我尝试让 Room DAO 方法返回 a 时遇到以下错误PagingSource

D:\Programming\Android\something\app\build\tmp\kapt3\stubs\debug\com\someapp\something\data\db\UsersDao.java:38: error: Not sure how to convert a Cursor to this method's return type (androidx.paging.PagingSource<java.lang.Integer,com.someapp.something.data.db.GithubUser>).
    public abstract androidx.paging.PagingSource<java.lang.Integer, com.someapp.something.data.db.GithubUser> getUserByUserName(@org.jetbrains.annotations.NotNull()
    
^D:\Programming\Android\something\app\build\tmp\kapt3\stubs\debug\com\someapp\something\data\db\UsersDao.java:43: error: Not sure how to convert a Cursor to this method's return type (androidx.paging.PagingSource<java.lang.Integer,com.someapp.something.data.db.GithubUser>).
public abstract androidx.paging.PagingSource<java.lang.Integer, com.someapp.something.data.db.GithubUser> getUserByNote(@org.jetbrains.annotations.NotNull()
Run Code Online (Sandbox Code Playgroud)

这是我的UsersDao.kt

@Dao
interface UsersDao {

    @Insert
    fun insert(user: GithubUser): Completable

    @Insert
    fun insert(userList: List<GithubUser>): Completable

    @Query("DELETE FROM userDb")
    fun clearDb(): Completable

    @Query("SELECT * FROM …
Run Code Online (Sandbox Code Playgroud)

android rx-java2 android-room android-paging android-paging-library

19
推荐指数
1
解决办法
2395
查看次数

如何重置BehaviorSubject

我有一个BehaviorSubject我想要重置 - 我的意思是我希望最新值不可用,就像它刚刚创建一样.

我似乎没有看到一个API来做这个,但我想有另一种方法来实现相同的结果?

我希望的行为是我需要发出事件,并且我希望订阅者在他们订阅时获得最新事件 - 如果特定经理处于"已启动"状态.但是当这个经理被"停止"时,最新的事件应该不可用(就像它从未在第一时间开始一样).

stream reactive-programming rx-java rx-java2

18
推荐指数
2
解决办法
2万
查看次数

Worker中的同步或异步Rxjava(来自WorkManager组件)什么是正确的选择?

我是新架构组件WorkManager的新手,我通过Retrofit和RxJava进行API调用.

我的用例是从后端获取新帖子,然后显示通知,并更新小部件.

所以来自Worker类的doWork()方法中的代码可能看起来像这样.

@NonNull
  @Override
  public Result doWork() {
    AppDependencies appDependencies = new AppDependencies((Application) getApplicationContext());
    Repository repository = appDependencies.getRepository();

    repository.getNewPosts()
        .flatMap(newPosts -> repository.inserPosts(newPosts).toObservable())
        .doOnError(Timber::e)
        //if success - > return  Result.SUCCESS,
        // -> show notification
        // -> update widget
        // error-> return Result.Failure
        .dontKnowWhatBestNextThing; //blocking or subscribing

    //if we reached here then Retry
    return Result.RETRY;
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是在Worker类中使用RxJava代码的正确方法是什么,因为doWork()方法有一个返回值,所以我必须使Rx代码同步.

如果我使用非阻塞Rx方法,我怎样才能返回值(成功 - 失败 - 重试)

android rx-java2 android-architecture-components android-jetpack android-workmanager

18
推荐指数
2
解决办法
3193
查看次数