RxAndroid / RxLifeCycle – 处理处理onError而不是onComplete

我正在尝试将RxLifeCycle实现到与RxJava联网中。 我一直在使用Consumer一个子Consumer ,但是对于RxLifeCycle ,你需要处理onError 。 所以我已经转移到Observer 。 这个问题是,当调用被处置时,它调用onComplete而不是onError ,我更喜欢。 buildle.gradle: // RxJava compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘io.reactivex.rxjava2:rxjava:2.0.3’ compile ‘com.trello.rxlifecycle2:rxlifecycle-kotlin:2.2.1’ compile ‘com.trello.rxlifecycle2:rxlifecycle-android-lifecycle-kotlin:2.2.1’ 我以前的NetworkConsumer是这样构建的,我会处理accept所有结果。 NetworkConsumer: abstract class NetworkConsumer : Consumer<NetworkResponse> { @Throws(Exception::class) override fun accept(response: NetworkResponse) { … } // to override open fun onSuccess(response: T) {} open fun onComplete() {} } 我的网络电话都使用Single结构化。 fun getFavorites(): Single<NetworkResponse<Array>> 我正在使用它。 service.getFavorites(…) […]

映射,除非例外

我有一个表示串行化数据的String列表,我想map到一个对象列表。 我使用下面的代码: strings.map { gson.fromJson(it, Model::class.java) } // .doOtherStuff 但是,有时会出现解析错误,而流只是停止,我希望能够恢复列表直到失败。 例如,如果在项目7发生错误,我想doOtherStuff获得成功处理的6个项目。 什么是最习惯的方式来做到这一点? 我可以过滤列表,看看解析是否会成功,但这是一个昂贵的操作正在做两次。

Kotlin:一个抽象的超类有一个抽象的构造函数吗?

我刚刚写了这样的文字,尽管如此, import com.github.salomonbrys.kotson.get import com.github.salomonbrys.kotson.int import com.github.salomonbrys.kotson.jsonObject import com.google.gson.JsonElement import com.google.gson.JsonObject abstract class BatchJobPayload { abstract fun toJson(): JsonObject } class BookingConfirmationMessagePayload(val bookingId: Int) : BatchJobPayload() { constructor(payload: JsonElement) : this(payload[“bookingId”].int) override fun toJson() = jsonObject( “bookingId” to bookingId ) } 但是我想坚持,如果可能的话,扩展BatchJobPayload所有类BatchJobPayload实现一个带有签名constructor(payload: JsonElement): BatchJobPayload的二级构造constructor(payload: JsonElement): BatchJobPayload ,它将用于反序列化。 BookingConfirmationMessagePayload有这样的构造函数,但只是因为我把它放在那里,不是因为BatchJobPayload坚持它…

从列表中重建N元树

data class Node(val ID : Long, val name : String) 我有以下三个值(按照外观顺序)的有序列表:ID,名称和深度。 0000 : A : 0 0001 : B : 1 0002 : C : 2 0003 : D : 2 0004 : E : 1 0005 : F : 2 0006 : G : 1 0007 : H : 1 0008 : I : […]

吸毒者和安置者在Kotlin

例如,在Java中,我可以自己编写getter(由IDE生成),也可以在lombok中使用@Getter之类的Annotations – 这非常简单。 但是Kotlin 默认有getter和setter 。 但我不明白如何使用它们。 我想说的是,可以说 – 类似于Java: private val isEmpty: String get() = this.toString() //making this thing public rises an error: Getter visibility must be the same as property visibility. 那么吸气剂如何工作呢?

Koltingenerics声明 – 站点方差构造

我正在阅读kotlin没有通配符的原因( https://kotlinlang.org/docs/reference/generics.htm l)。 这一切都来到声明网站的变化。 我们有和结构应该取代通配符。 我想我明白了是如何运作的,但我却在遇到麻烦。 所以在java中,我们可以这样写: public List list1; public List list2; 初始化后的第一种情况变成只读列表(虽然不是完全不可改变的原因,我们可以清除它),如果我们把每个元素都视为数字,就可以读取它们。 第二种情况是只写(尽管我们可以阅读它,如果我们把每个元素作为对象)。 我们可以写那里字符串和它的子类。 在Kotlin中,我能够像这样使用重新创建list1示例: class Service { val container = Container(mutableListOf(“1”, “2”, “3”)) } class Container(var list1: MutableList) 最后我尝试了一些类似于东西,认为我可以重新创建list2的例子,但是我失败了: 有人可以向我解释如何在Kotlin中实现我的list2例子吗? 我应该如何正确使用结构?

被其他同伴对象引用的密封类对象神秘地变为空

有一个封闭的类: sealed class Alphabet(val name: String) { object A : Alphabet(“A”) object B : Alphabet(“B”) object C : Alphabet(“C”) object D : Alphabet(“D”) object E : Alphabet(“E”) companion object { val array = arrayOf(A, B, C, D, E) val list = listOf(A, B, C, D, E) } override fun toString(): String { return name } […]

Android Studio / IntelliJ中的^ let注释是什么?

在一个封闭的框架中,我有时候会在我的陈述之前看到注释,而我不清楚它们的含义或者为什么他们在那里。 是否表示将返回一个值作为let调用的值? 截图:

CORUTTINE_SUSPENDED和suspendCoroutineOrReturn在Kotlin

kotlin中的协程的概念是抽象暂停和回调的概念,并写出简单的顺序代码。 如果协程暂停或不在线,则无需担心,与线程类似。 suspendCoroutineOrReturn和COROUTINE_SUSPENDED的用途是什么,在什么情况下你会使用它们?

返回块中的最后一个expression式

我正在学习新的,非常漂亮的Kotlin语言,一切似乎都是非常符合逻辑的。 我只发现了一件似乎是规则的任意例外的东西,而不是一个坚实的规则。 但也许我缺乏足够的理解背后的一些深层原因。 我知道,在if-else和when语句中有代码块,则返回最后一个expression式。 在下面的例子中,根据条件返回1或2 – 在我们的例子中返回1 。 val x = if (1 < 2) {println("something"); 1} else {println("something else"); 2} 另一方面,这不适用于任何代码块。 下一行将y分配给1但将整个代码块分配给一个lambda。 val y = {println(“something”); 1} 同样在函数体中,最后一个expression式不被返回。 这甚至没有编译。 fun z() : Int { println(“something”) 1 } 那么规则究竟是什么? 它是否真的如此随心所欲:如果在if-else或when用作expression式的语句中有一段代码,则返回该块中的最后一个expression式。 否则,最后一个expression式不会返回到外部作用域。 还是我错过了什么?