小编Mak*_*dov的帖子

如何在RxJava2中链接两个Completable

我有两个可完成的.我想做以下场景:如果第一个Completable到达onComplete,继续第二个Completable.最终结果将是第二次完成的完成.

当我有单个getUserIdAlreadySavedInDevice()和Completable login()时,我就是这样做的:

@Override
public Completable loginUserThatIsAlreadySavedInDevice(String password) {
    return getUserIdAlreadySavedInDevice()
            .flatMapCompletable(s -> login(password, s))

}
Run Code Online (Sandbox Code Playgroud)

java rx-java rx-java2

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

Android如何在Kotlin中以编程方式设置多个重力值?

在Java中它就像:

layoutParams.setGravity(Gravity.END|Gravity.BOTTOM);
Run Code Online (Sandbox Code Playgroud)

如何在Kotlin做到这一点?

android kotlin

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

通过改造和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
查看次数

Firebase:如何在Android应用中设置默认通知频道?

如何为应用程序在后台时出现的通知消息设置默认通知通道?默认情况下,这些消息使用"杂项"通道.

android firebase firebase-cloud-messaging android-8.0-oreo

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

Retrofit和RxJava:如何组合两个请求并获得对两个结果的访问权限?

我需要提出两个服务请求并将其结合起来:

ServiceA()=> [{"id":1,"name":"title"},{"id":1,"name":"title"}]

ServiceB(id)=> {"field":"value","field1":"value"}

目前,我已设法将结果组合在一起,但我需要将id参数作为参数传递给ServiceB并获取对第一个结果的访问权限.

到目前为止我尝试了什么:

   Retrofit repo = new Retrofit.Builder()
                .baseUrl("https://api.themoviedb.org/3/genre/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

        Observable<GenerosResponse> Genres  = repo
                .create(services.class)
                .getAllGeneros("movie","list","da0d692f7f62a1dc687580f79dc1e6a0")
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread());

        Observable<ResponseMovies> Movies = repo
                .create(services.class)
                .getAllMovies("28","movies","da0d692f7f62a1dc687580f79dc1e6a0",12)
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread());

        Observable<CollectionsMovies> combined = Observable.zip(Genres, Movies, new Func2<GenerosResponse, ResponseMovies, CollectionsMovies>() {
            @Override
            public CollectionsMovies call(GenerosResponse generosResponse, ResponseMovies responseMovies) {
                return new CollectionsMovies(generosResponse, responseMovies);
            }
        });

        combined.
                subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(...);
Run Code Online (Sandbox Code Playgroud)

编辑

解决方案根据@Maxim Ostrovidov的回答:

 private Observable<GenerosResponse> makeRequestToServiceA() {
        return  service.getAllGeneros("movie","list","da0d692f7f62a1dc687580f79dc1e6a0"); //some network call
    } …
Run Code Online (Sandbox Code Playgroud)

java android rx-java retrofit2

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

无法解析符号AndroidSchedulers

我正在使用版本2.0.0的RxJava,似乎我无法访问AndroidSchedulers.我无法通过RxJava访问mainthread

java android rx-java rx-java2

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

有没有办法自动填充参数名称?

当我使用大量参数实例化类(或调用方法)时,我总是使用命名参数.但每次输入每个参数名称都很累人:

data class User(val id: String, 
                val name: String,
                val age: Int)

val user = User(id = "1", name = "John", age = 99)
Run Code Online (Sandbox Code Playgroud)

IDEA可以预填这样的参数吗?

val user = User(
    id = ,
    name = ,
    age = 
)
Run Code Online (Sandbox Code Playgroud)

intellij-idea kotlin android-studio

16
推荐指数
3
解决办法
2198
查看次数

Kotlin:如何检查枚举是否包含给定的字符串而不会弄乱异常?

为什么contains枚举类(以及Java)中没有方法?以及如何优雅地实现它?现在我正在使用这种丑陋的方法:

val contains: Boolean = 
    try {
        MyEnum.valueOf("some string")
        true
    } catch (e: IllegalArgumentException) {
        false
    }
Run Code Online (Sandbox Code Playgroud)

kotlin

13
推荐指数
2
解决办法
6652
查看次数

RxJava FlatMap:如何跳过错误?

在链obs1.flatmap(x -> obs2()).subscribe(sub)是否obs2会产生一个错误,它会导致立即调用onErrorsub.这是记录在案的:

请注意,如果通过flatMap映射到源Observable中的项的任何单个Observable都通过调用onError中止,则flatMap生成的Observable将自行立即中止并调用onError.

但是有可能忽略obs2错误并obs1继续发射吗?

java rx-java

8
推荐指数
2
解决办法
4398
查看次数

Firebase消息传递:默认通知通道不起作用

当我在没有在Android Oreo上指定的频道的情况下从Firebase控制台发送通知时,它必须使用"杂项"频道或者如果从Android清单提供默认频道.所以我在我的应用中创建并提供默认频道:

// Application onCreate
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val manager = getSystemService(Context.NOTIFICATION_SERVICE) 
            as NotificationManager
    val channelId = getString(R.string.notification_channel_id)
    if(manager.getNotificationChannel(channelId)==null) {
        val channel = NotificationChannel(channelId,
                getString(R.string.notification_channel_name),
                NotificationManager.IMPORTANCE_DEFAULT)
        channel.description = 
                getString(R.string.notification_channel_description)
        manager.createNotificationChannel(channel)
    }
}

// Manifest
<meta-data
    android:name="com.google.firebase.messaging.default_notification_channel"
    android:value="@string/notification_channel_id" />
Run Code Online (Sandbox Code Playgroud)

但它不起作用.通知始终使用"杂项"频道.我在这里遗漏了什么或者它是Firebase的错误吗?

android push-notification firebase firebase-cloud-messaging android-8.0-oreo

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