小编Tho*_*oom的帖子

RxJava; 如何同步发出可观察量

我想同步发出两个Observable对象(它们是异步的),一个接一个地返回第一个发出的Observable对象.如果第一个失败,则不应发出第二个.

假设我们有一个Observable签署用户,另一个Observable 登录自动选择用户的帐户.

这是我试过的:

public Observable<AccessToken> signInAndSelectAccount(String username, String password)
{

    Observable<AccessToken> ob1 = ...; // Sign in.
    Observable<Account> ob2 = ...; // Select account.


    return Observable.zip(
            ob1,
            ob2,
            new Func2<AccessToken, Account, AccessToken>() {
                @Override
                public AccessToken call(AccessToken accessToken, Account account)
                {
                     return accessToken;
                }
            });
}
Run Code Online (Sandbox Code Playgroud)

遗憾的是,这对我的用例不起作用.它将以"ob1"开头并行发出/调用两个observable.

有人遇到类似的用例吗?或者有一个关于如何让observables以同步的方式等待彼此的想法,在那里可以返回第一个发出的?

提前致谢.

java rx-java

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

例如,与仅使用 String 类型相比,在 Gradle 插件中使用 Gradle Property 类型有什么好处?

  1. 在 Gradle 插件中,我可以将属性定义为:
open class ExamplePluginExtension {

    var exampleName: String? = null

}
Run Code Online (Sandbox Code Playgroud)

并在build.gradle.kts中访问它,如下所示:

example {

    exampleName = "Lorem Ipsum"

}
Run Code Online (Sandbox Code Playgroud)

或者2.我可以使用Gradle的Property类型(org.gradle.api.provider.Property):

open class ExamplePluginExtension @Inject constructor(objectFactory: ObjectFactory) {

    val exampleName: Property<String> = objectFactory.property(String::class.java)

}
Run Code Online (Sandbox Code Playgroud)

在build.gradle.kts中访问它,如下所示:

example {

    exampleName.set("Lorem Ipsum")

}
Run Code Online (Sandbox Code Playgroud)

Gradle 文档提倡在 Gradle 插件中使用 Property 类型,但为什么呢?使用 Property 类型非常麻烦,会创建大量样板文件并禁止使用可为 null 的属性。我看到很多第三方库比如Flyway都使用第一个选项,完全忽略了Property类型。

java android gradle kotlin gradle-plugin

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

标签 统计

java ×2

android ×1

gradle ×1

gradle-plugin ×1

kotlin ×1

rx-java ×1