我正在尝试为在Android Studio Java中创建的一个自定义对象编写一个简单的对象类型转换器。这个对象叫做MapAnnotationObject
,它保存了三个ArrayList,分别包含以下对象:Markers(标记)、Circles(圆圈)和PolyLines(多段线),这些都在Google Maps实例上可绘制。
import com.google.android.gms.maps.model.Circle;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import java.io.Serializable;
import java.util.ArrayList;
public class MapAnnotationObject implements Serializable {
ArrayList<Marker> markerList;
ArrayList<Circle> circleList;
ArrayList<ArrayList<LatLng>> polyLineList;
public MapAnnotationObject(){
markerList = new ArrayList<>();
circleList = new ArrayList<>();
polyLineList = new ArrayList<>();
}
// 添加对象到列表的方法...
// 获取对象列表的方法...
// 从列表移除对象的方法...
}
我想把这个对象存储在Room数据库中,并为此编写了一个使用Gson的对象转换器:
import androidx.room.TypeConverter;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class MapAnnotationObjectConverter {
static Gson gson = new Gson();
@TypeConverter
public static MapAnnotationObject stringToMapAnnotationObject(String data){
if (data == null){
return new MapAnnotationObject();
}
Type mapObjectType = new TypeToken<MapAnnotationObject>() {}.getType();
return gson.fromJson(data, mapObjectType);
}
@TypeConverter
public static String mapAnnotationObjectToString(MapAnnotationObject mapAnnotationObject){
return gson.toJson(mapAnnotationObject); // 这里报错
}
}
并且在数据库中设置了相应的列来存储这个对象:
@ColumnInfo(name = "map_annotations")
@TypeConverters(MapAnnotationObjectConverter.class)
public MapAnnotationObject map_annotations;
然而,当我尝试向Room数据库添加数据时,遇到了错误:
java.lang.AssertionError: AssertionError (GSON 2.8.5): java.lang.NoSuchFieldException: ALL_OBJECT_POOL
日志指向了转换器中的这行代码:
return gson.toJson(mapAnnotationObject);
我对这个问题感到非常困惑,不知道如何解决。如果有任何帮助或指导,我将不胜感激!我已经有一个使用相同代码实现的第二个自定义对象能够成功地被数据库接受,所以我考虑是否需要将所有的ArrayList单独转换,但不确定这是否是正确的解决途径。