android – Anko中的简单MapRowParser是什么?

我已经阅读了 Anko SQLite的文档.

我知道创建一个简单的RowParser可以通过执行val rowParser = classparser< Person>()来完成

classparser是Anko-sqlite源代码中定义的函数.

如何获得简单的MapRowParser?

解决方法

如果你继续使用Github并执行 this search,你会看到有两个文件以任何方式引用MapRowParser.

一个文件包含:

interface MapRowParser<out T> {
    fun parseRow(columns: Map<String,Any?>): T
}

其中显示MapRowParser作为接口.

然而.根据搜索,有两个文件提到了MapRowParser.如果你查看文件,你会发现没有类.根据显示该类的手动实现的this question,它必须手动实现.此外,Anko的代码不显示任何实现MapRowParser的类.

因此,您必须创建一个自己实现MapRowParser的类.如果我已经正确地阅读了文档和代码,那么地图本身会自动传递,但解析器所做的是处理您收到的数据.

与RowParser完全相同.这是一个界面.然而,there is a method that returns a specific parser.然而,与RowMapParser没有任何相似之处.

编辑:

进入the source code表明两种类型的单行解析器用于几种不同的类型.我认为没有MapRowParser的原因是因为写一个好的,通用的地图解析器太难了.地图通常具有不同的行为,因为它们具有键和值,而List仅具有您作为类型转换的值并返回:

private class SingleColumnParser<out T> : RowParser<T> {
    override fun parseRow(columns: Array<Any?>): T {
        if (columns.size != 1)
            throw sqliteException("Invalid row: row for SingleColumnParser must contain exactly one column")
        @Suppress("UNCHECKED_CAST")
        return columns[0] as T//Right here it just casts the column as the type defined when creating
    }
}

您可以对地图执行相同操作,但密钥会丢失.此外,通过源代码检查,您会看到传递给解析器的数据只包含一列.

进一步深入挖掘源代码也揭示了这种方法

private fun readColumnsMap(cursor: Cursor): Map<String,Any?> {
    val count = cursor.columnCount
    val map = hashMapOf<String,Any?>()
    for (i in 0..(count - 1)) {
        map.put(cursor.getColumnName(i),cursor.getColumnValue(i))
    }
    return map
}

如果我已经正确读取了源代码,则上述方法将整行转换为单个Map,并使用该列的名称.所以你最终得到这样的东西:

Col1 -> Row1col1val
Col2 -> Row1col2val
...

系统在游标上运行,可以在解析List或Map中的多个条目的方法中看到:

movetoFirst()
while (!isAfterLast) {
    list.add(parser.parseRow(readColumnsMap(this)))//adds the result into a pre-defined list to return
    movetoNext()
}

这再次表明编写泛型是很难的,因为必须有一个有意义的返回值,如果你不知道将哪种数据放入单个返回值,这很难做到.

这对于编写通用解析器来说太难了,因为你永远无法确定行的数量,要对值做什么等等.因此,为了编写自己的解析器,你需要创建一个实现MapRowParser并使用它来解析所需数据的类.通过将ID分配给存储为blob的类,将数据放入数据类中,无论您使用什么,都可以实例化.

*写起来太难了,因为你永远无法确定一个开发人员将如何需要这些数据.当你将它作为地图时,你不能只返回一个值,因为所有其他数据都会丢失.因此,如果需要通用解析器,则必须将其作为映射返回,然后开发人员仍然必须解析数据.使用列表,只需返回单个值即可.但是对于Maps,为了不丢失任何数据,如果它是为标准化目的而编写的,那么解析器基本上变得无用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方法有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android岛屿数量算...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Andro...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android数据压缩的方法是什么”文章能帮助大家解决疑惑...
这篇“Android怎么使用Intent传大数据”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅...
本文小编为大家详细介绍“Android事件冲突怎么解决悬浮窗拖拽问题”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android事件冲突怎么解决悬浮窗拖拽问题”文...
这篇文章主要介绍了Android拼接如何实现动态对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android拼接如何实现动态对象文...
今天小编给大家分享一下Android全面屏适配怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
本篇内容介绍了“Android怎么开发Input系统触摸事件分发”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何...
今天小编给大家分享一下AndroidRoom怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下...
本文小编为大家详细介绍“AndroidRoom使用方法有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“AndroidRoom使用方法有哪些”文章能帮助大家...
这篇文章主要介绍“Android中的OpenGL怎么配置使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android中的Open...
这篇文章主要介绍了Android如何自定义自动识别涂鸦工具类的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android如何自定义自动...
今天小编给大家分享一下Android如何自定义有限制区域的图例角度自识别涂鸦工具类的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以...
今天小编给大家分享一下ReactNative错误采集原理在Android中如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章...
这篇文章主要讲解了“Android崩溃日志收集和保存代码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“A...
这篇“Android面向单Activity开发实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大...
本篇内容介绍了“Android应用启动白屏处理的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何...