编辑:根据Nazariy Moshenskiy的答案进行测试
我尝试将GeoPoints对象存储在android的抽象数据持久层Room中。似乎不允许执行此操作。
项目无法编译,并出现以下错误:
错误:无法弄清楚如何将该字段保存到数据库中。您可以 考虑为其添加类型转换器。
是否有解决方案来实现这一目标? (兼容的TypeConverter)
PS:我不想将模型类的对象类型更改为long,long或任何其他类型,因为我正在模型类中使用GeoPoints存储在Firestore中,并根据我们可以提供给查询的参数进行检索GeoPoints。
答案 0 :(得分:3)
由于OP解决方案不起作用,我决定实现TypeConverter来实现这一目标。即使这个问题有很多反对意见,认为可以实现此目标,但我还是会为那些实际尝试或未能实现目标的人分享我的解决方案。
因此,我编写了一个名为CustomTypeConverters的类,并使用@TypeConverter注释了两个方法。
此方法将采用JSON字符串作为输入参数。然后呢 将使用Gson库创建一个GeoPoint对象, 并返回它。
此方法将把GeoPoint对象作为输入参数。然后 它将使用Gson库创建一个JSON String对象并返回它。
CustomTypeConverters.java
public class CustomTypeConverters {
@TypeConverter
public static GeoPoint stringToGeoPoint(String data) {
return new Gson().fromJson(data, GeoPoint.class);
}
@TypeConverter
public static String geoPointToString(GeoPoint geoPoint) {
return new Gson().toJson(geoPoint);
}
}
然后,我们需要使用我们在POJO中定义的GeoPoint对象内的注释来指向此转换器。假设我有一个带有GeoPoint对象的User类,
@TypeConverters(CustomTypeConverters.class)
private GeoPoint geoPoint;
我通过运行此代码的设备中的数据/数据/应用程序包/数据库浏览来验证答案。
答案 1 :(得分:0)
@channae说的是真的,但是有一些遗漏: 您还需要像下面这样在db文件中添加转换器:
@Database(entities = [Wine::class,Store::class], version = 3)
@TypeConverters(GeoPointConverter::class)
abstract class WineryDatabase : RoomDatabase(){
....
}
答案 2 :(得分:-1)
任何对象都可以存储在Room中。