我正在开发一个简单的Android应用程序,该应用程序将显示车辆的图标,用户可以单击该图标以显示车辆信息。我想在构建应用程序时动态加载数据,即数据将来自包括图标图片在内的外部来源。
我是Kotlin的新手,不确定要搜索什么以了解合适的解决方案。定义数据的正确方法是什么,最好是按如下方式创建一个类,然后创建该类的数组(不确定是否可行)
public class VehicleSpec()
{
var OEM: String? = null
var ModelName: String? = null
var EngineSize: String? = null
}
还是创建多维数组然后将数据链接到单元格更好?
var VehicleSpec = arrayOf(20,20)
VehicleSpec[0][0] = Null //OEM
VehicleSpec[0][1] = Null //ModelName
VehicleSpec[0][2] = Null //EngineSize
设置数据存储的最佳方法是什么,有什么好的参考资料可以理解应该如何设置?
答案 0 :(得分:1)
首先,使用“ proca类”可以使您轻松理解并获得语言本身的全部好处...因此,请不要将数据保存在数组中..让编译器处理这些问题。
第二,我建议您有两种类型(并使用数据类;-))
data class VehicleListEntry(
val id: Long,
val name: String
)
和
data class VehicleSpec(
val id: Long,
val oem: String = "",
val modelName: String = "",
val engineSize: String = ""
)
我认为尽可能避免使用null值。 因此,如果您有仅显示的字符串-请使用空字符串而不是null。
现在有了一个模型来存储您的数据
class VehicleModel() {
private val specs: MutableMap<Long, VehicleSpec> = mutableMapOf()
private var entries: List<VehicleListEntry> = listOf()
fun getSpec(id: Long) = specs[id]
fun addSpec(spec: VehicleSpec) = specs[spec.id] = spec
fun getEntries(): List<VehicleListEntry> = entries
fun setEntries(data: List<VehicleListEntry>) {
entries = data.toMutableList()
}
}
您还可以为模型使用数据类,
data class VehicleModel(
val specs: MutableMap<Long, VehicleSpec> = mutableMapOf(),
var entries: List<VehicleListEntry> = listOf()
)
最后但并非最不重要的一个控制器,用于将东西聚集在一起
class VehicleController() {
private val model = VehicleModel()
init{
// TODO get the entries list together
}
fun getEntries() = model.entries
fun getSpec(id: Long) : VehicleSpec? {
// TODO load the data from external source (or check the model first)
// TODO store the data into the model
// TODO return result
}
}
答案 1 :(得分:1)
定义数据的正确方法是什么,最好是如下创建一个类,然后创建该类的数组
使用数组作为对象的属性并不能充分利用您在Kotlin(甚至是Java)中拥有的类型安全性。 如果要表达的是对象的多个属性,则应使用类定义那些属性。如果属性具有不同的类型,则尤其如此。
在数组和类之间没有性能差异,因为在两种情况下都将获得对堆的引用。仅当您将多维数组方法转换为具有智能索引的一维数组时,您才能节省性能。在大多数情况下,除非您要处理大量数据并且知道性能在此特定级别上是个问题,否则您不应该考虑使用此选项。
(不确定是否可行)
定义类的列表/数组肯定是可能的。
通常,对于仅用作数据容器的类,您应该首选data classes,因为它们免费为您提供了有用的方法,并且这些方法对于简单的“数据包”完全有意义,例如您的案例( ,哈希码,组件访问等)。
data class Vehicle(
val OEM: String,
val ModelName: String,
val EngineSize: String
)
此外,我建议尽可能使用val
而不是var
。在Kotlin中,不变性更常见。
最后但并非最不重要的一点是,如果您知道必须始终存在一个值,则最好将非null值替换为null值。在某些情况下,如果缺少该值,则应使用null而不是占位符,例如空字符串或-1。