android - 为什么 Kotlin for Android Developers(该书)需要再次添加扩展 parseList?

标签 android kotlin anko

我知道Anko提供了parseSingle、parseOpt和parseList函数,我不明白为什么Android Developers(书)的代码需要重新设计扩展parseList。

你能告诉我吗?谢谢!

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/data/db/ForecastDb.kt

override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {

        val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
        val dailyForecast = select(DayForecastTable.NAME)
                .whereSimple(dailyRequest, zipCode.toString(), date.toString())
                .parseList { DayForecast(HashMap(it)) }

}

https://github.com/antoniolg/Kotlin-for-Android-Developers/blob/master/app/src/main/java/com/antonioleiva/weatherapp/extensions/DatabaseExtensions.kt

fun <T : Any> SelectQueryBuilder.parseList(parser: (Map<String, Any?>) -> T): List<T> =
        parseList(object : MapRowParser<T> {
            override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})

最佳答案

Anko 的parseList 采用MapRowParser,而不是函数。这简化了使用。使用 Anko 版本你会写

.parseList { mapRowParser { DayForecast(HashMap(it)) } }

相反。这是假设有一个像 mapRowParser 这样的构造函数,我在他们的源代码中找不到它;否则,您可以非常简单地编写它。

或者更确切地说,它已经在示例代码中为您编写,只是没有作为单独的函数:

fun <T> mapRowParser(parser: (Map<String, Any?>) -> T): MapRowParser<T> = 
    object : MapRowParser<T> {
        override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
    }

老实说,如果这个功能还不存在,我真的很惊讶(也许叫别的东西,但是什么?)。 OTOH,如果它确实存在,Leiva 应该使用它。

关于android - 为什么 Kotlin for Android Developers(该书)需要再次添加扩展 parseList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47070049/

相关文章:

android - 类型干扰失败。 Kotlin 和 Anko 中的预期类型不匹配 : required String found pair<String, String>

Android - 阻止 NEW_OUTGOING_CALL 事件循环?

Android v14 SwitchPreference 不更改值

android - 只读 mutableStateListOf

kotlin - Kotlin 中多个 init block 的用例?

kotlin - 安科的复合重力

android - Google Play 游戏服务 - 测试排行榜/成就

java - 无法打开数据库,因为数据库不存在

使用 kotlin 的 Json 数据

android - Anko layouts - applyRecursively 中区分布局