【发布时间】:2018-01-18 21:34:46
【问题描述】:
我正在尝试为 Android Room Persistance Library 使用自定义 TypeConverter,如 documentation 所示。主要思想是格式化 Android Room Dao 正在执行的所有 Sqlite SUM 选择。
我的代码:
@TypeConverter
public static double toDouble(String str) {
return FormatHelper.formatAmount(Double.parseDouble(str));
}
@TypeConverter
public static String fromDouble(double doub) {
return String.valueOf(FormatHelper.formatAmount(doub));
}
我已经尝试清除数据并重建应用程序。 同一类中的日期转换器正在工作。 Android TypeConverters 不支持 Primitive 变量吗?
编辑:
我在 RoomDatabase 类中注册了 TypeConverter,以便在整个数据库中使用它。
更具体地说是我的问题:如果我的 Dao 类中有这样的查询:
@Query("SELECT SUM(quantity) FROM production_plan_item")
Double getActivePlanItemsCount();
它有时可能会返回类似 2.30000000000001 的值。
我认为类型转换器用于处理查询的返回值。每次我将双精度保存到数据库或从中选择双精度之前,我的 TypeConverter 都会为我舍入双精度,而我每次选择某些东西时都不必舍入它。
否则我必须手动舍入每个选定的双精度数。
【问题讨论】:
-
“主要思想是格式化所有选择 Android Room Dao 正在执行的 Sqlite SUM”——这对我来说毫无意义。格式化不是持久性库的责任。这是演示者或与用户界面相关的一些其他代码的责任。除此之外,您在哪里注册这些
TypeConverter方法?您希望它们会产生什么影响? -
@CommonsWare 我编辑了我的问题。
标签: android android-room