小编mra*_*ski的帖子

RxJava onErrorResumeNext()

我有两个可观察对象(简称为A和B)和一个用户.因此,订阅者订阅A,如果A上有错误,那么B(这是后备)就会启动.现在,每当A遇到错误B被称为罚款,但是A调用订阅者的onComplete(),所以B响应即使B执行成功,也永远不会到达订户.

这是正常行为吗?我认为onErrorResumeNext()应该继续流并在完成后通知订阅者,如文档中所述(https://github.com/ReactiveX/RxJava/wiki/Error-Handling-Operators#onerrorresumenext).

这是我正在做的整体结构(省略了几个"无聊的"代码):

public Observable<ModelA> observeGetAPI(){
    return retrofitAPI.getObservableAPI1()
            .flatMap(observableApi1Response -> {
                ModelA model = new ModelA();

                model.setApi1Response(observableApi1Response);

                return retrofitAPI.getObservableAPI2()
                        .map(observableApi2Response -> {
                            // Blah blah blah...
                            return model;
                        })
                        .onErrorResumeNext(observeGetAPIFallback(model))
                        .subscribeOn(Schedulers.newThread())
            })
            .onErrorReturn(throwable -> {
                // Blah blah blah...
                return model;
            })
            .subscribeOn(Schedulers.newThread());
}

private Observable<ModelA> observeGetAPIFallback(ModelA model){
    return retrofitAPI.getObservableAPI3().map(observableApi3Response -> {
        // Blah blah blah...
        return model;
    }).onErrorReturn(throwable -> {
        // Blah blah blah...
        return model;
    })
    .subscribeOn(Schedulers.immediate());
}

Subscription subscription;
subscription = observeGetAPI.subscribe(ModelA -> {
    // …
Run Code Online (Sandbox Code Playgroud)

java rx-java retrofit

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

当我杀死我的应用程序时,BroadcastReceiver无法正常工作

我注意到,每当我通过长按手机的后退按钮手动杀死我的应用程序时,我的广播接收器就会停止工作.每次用户挂断电话时,接收方负责显示通知,并在manifest.xml中注册该通知.

这是正常/预期的行为吗?我认为接收器应该继续工作,即使用户决定杀死我的应用程序......有没有办法防止这种情况?

谢谢.

编辑

这是接收器的清单条目:

<receiver android:name=".BroadcastReceivers.CallReceiver" android:enabled="true">
   <intent-filter>
       <action android:name="android.intent.action.NEW_OUTGOING_CALL" />
       <action android:name="android.intent.action.PHONE_STATE" />
   </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

android broadcastreceiver

7
推荐指数
1
解决办法
6231
查看次数

链接两个Observable返回另一个

我有两个名为A <'ModelA'>和B <'ModelB'>的可观察对象.它们中的每一个都对不同的REST服务执行请求,因此它们扩展了如上所述的不同模型.任何人执行的请求都可能失败.现在,我需要能够链接它们并返回一个ModelC对象.所以,伪编码流将是这样的:

一个<'ModelA'>执行请求,如果失败则执行某些操作,如果没有则将其结果(responseModelA)传递给B <'ModelB'>,这样它就可以执行另一个涉及使用responseModelA部分的REST请求.如果B失败会发生某些事情,如果没有,则将其响应(responseModelB)与responseModelA(手动设置POJO字段)组合在一起以创建ModelC,这是订户应该在其call()方法上接收的参数.

使用rxJava可以远程编码吗?我完全坚持这一点,所以我对任何吸烟都持开放态度.

谢谢.

java reactive-programming rx-java retrofit

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

在 Kotlin 中按属性和最大值过滤重复项

快速(而且最有可能)简单的问题。

鉴于以下情况List<Job>

Job(requesterId: 1, offer: 100)
Job(requesterId: 1, offer: 150)
Job(requesterId: 1, offer: 200)
Job(requesterId: 2, offer: 100)
Job(requesterId: 3, offer: 100)
Job(requesterId: 3, offer: 110)
Run Code Online (Sandbox Code Playgroud)

我希望能够基于 过滤其重复项requesterId,但也基于最高的offer,这样我最终会得到一个List<Job>包含最高报价的文件,requesterId如下所示:

Job(requesterId: 1, offer: 200)
Job(requesterId: 2, offer: 100)
Job(requesterId: 3, offer: 110)
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

谢谢

android kotlin

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