我将东西存储在sqlite数据库中.它的一个属性是颜色.当我显示这个时,我想做
objLinearLayout.setBackgroundColor(some_int)
Run Code Online (Sandbox Code Playgroud)
通常我会使用R.color.red代替some_int.但是,我坚持使用颜色,我认为每次运行应用程序时R文件都会生成一个新的红色ID,这使得该方法不可行.我可以存储字符串表示,如"red",并在我的java代码中检查颜色字符串并应用正确的R.color,但这看起来很难看.有办法吗?
根据http://java-bytes.blogspot.com/2009/10/hashcode-of-string-in-java.html:"首先,它是一个众所周知的事实,即没有完美的哈希算法,没有碰撞."
作者实际上是在谈论而不是在理论上对吗?因为从理论上讲,这里是一个完美的哈希函数:"对于给定的对象,给它分配一个新的数字".有无数的数字,所以我们总会有东西分配给一个独特的对象.实际上,这是不可行的,因为我们的内存量有限.
在以下函数中:
suspend fun loadData(filename: String): MyData {
return withContext(Dispatchers.IO) {
loader.loadJsonFromFile(filename)?.let { json ->
Gson().fromJson<MyData>(
jsonStr,
object : TypeToken<MyData>() {}.type
)
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨 withContext 返回可为 null 的类型 MyData?,但 withContext 的签名看起来像
public suspend fun <T> withContext(
context: CoroutineContext,
block: suspend CoroutineScope.() -> T
): T
Run Code Online (Sandbox Code Playgroud)
我已将 T 定义为 MyData(不可为空)。为什么编译器给我一个错误,我可以在函数体中不使用 var 的情况下编写这个函数吗?
我有以下架构:
Configurations 1. configname 2. configvalue 3. otherDataInstanceId OtherData 1. dataname 2. datavalue 3. instanceId
配置otherDataInstanceId指向OtherData instanceId列的链接.我针对MySQL中的数据执行了以下查询:
SELECT other.datavalue AS time_stamp,
configs.configname AS configuration_name,
configs.configvalue AS configuration_value
FROM Configurations configs
JOIN OtherData other
WHERE configs.otherDataInstanceId=other.instanceId
AND other.dataname='timestamp'
GROUP BY configuration_name;
Run Code Online (Sandbox Code Playgroud)
我希望看到这些结果:
2012-01-02 16:05:48 Voltage 10 volts
2000-01-01 12:00:09 Voltage 8 volts
2013-06-01 01:12:32 Voltage 28 volts
2013-07-01 01:12:32 Voltage 5 volts
Run Code Online (Sandbox Code Playgroud)
相反,我只看到:
2012-01-02 16:05:48 Voltage 10 volts
Run Code Online (Sandbox Code Playgroud)
我一直在网上搜索,GROUP BY应该按指定的列获取结果和组行; 所以在我的数据库中,如果我消除GROUP BY,我会看到多个configname具有相同值的('Voltage').所以它应该将它们彼此相邻.但我只看到1排 …