Android osmdroid多边形类到字符串

Android osmdroid多边形类到字符串,android,json,gson,osmdroid,Android,Json,Gson,Osmdroid,我想在库中用Gson和Polygon类生成一个Json字符串 但我有安全例外 这是我的代码: Polygon polygon = new Polygon(); Gson gson = new Gsom(); Type type = new TypeToken<Polygon>(){}.getType(); String jsonString = gson.toJson(polygon, type); 如何修复它?错误表明,多边形的层次结构中包含了一些没有默认构造函数(没有参数的构造

我想在库中用Gson和Polygon类生成一个Json字符串 但我有安全例外 这是我的代码:

Polygon polygon = new Polygon();
Gson gson = new Gsom();
Type type = new TypeToken<Polygon>(){}.getType();
String jsonString = gson.toJson(polygon, type);

如何修复它?

错误表明,多边形的层次结构中包含了一些没有默认构造函数(没有参数的构造函数)的类。Gson需要这样的构造函数

是一种特定于osmdroid的非平凡抽象,它封装了形成形状的点和形状中的孔、有关其外观(绘制)和行为的信息。它包含一些其他非平凡类(例如)的实例。该类不打算用作数据对象,也不打算(反)序列化为JSON或任何其他类似格式。一些包含的成员很难序列化,因为它们是强平台特定的(Paint)

使用一个单独的类,其中只包含要存储在JSON中的信息(是否只需要点数组?是否需要包含任何样式信息?等等),这将是一个更干净的方法。此类应该是代码库的一部分,因此可以通过Gson轻松序列化。根据您的用例,您可以从此类或其他方式创建多边形。此方法允许您仅对所需的复杂性进行建模(例如,是否需要带孔的多边形?)

如果您真的想使用这个“快捷方式”并直接序列化多边形,您可以创建它并将其注册到Gson实例中。适配器的正确实现将非常复杂,超出此响应的范围。然而,对于简单的情况,您应该能够轻松地编写一个能够满足您需求的适配器


一些提示:遵循类的源代码#getPoints()将为多边形的轮廓提供点数组,#getHoles()将为您提供孔数组。

错误表明,在多边形的层次结构中存在一些没有默认构造函数(没有参数的构造函数)的类。Gson需要这样的构造函数

是一种特定于osmdroid的非平凡抽象,它封装了形成形状的点和形状中的孔、有关其外观(绘制)和行为的信息。它包含一些其他非平凡类(例如)的实例。该类不打算用作数据对象,也不打算(反)序列化为JSON或任何其他类似格式。一些包含的成员很难序列化,因为它们是强平台特定的(Paint)

使用一个单独的类,其中只包含要存储在JSON中的信息(是否只需要点数组?是否需要包含任何样式信息?等等),这将是一个更干净的方法。此类应该是代码库的一部分,因此可以通过Gson轻松序列化。根据您的用例,您可以从此类或其他方式创建多边形。此方法允许您仅对所需的复杂性进行建模(例如,是否需要带孔的多边形?)

如果您真的想使用这个“快捷方式”并直接序列化多边形,您可以创建它并将其注册到Gson实例中。适配器的正确实现将非常复杂,超出此响应的范围。然而,对于简单的情况,您应该能够轻松地编写一个能够满足您需求的适配器

一些提示:遵循类的源代码#getPoints()将为多边形轮廓提供点数组,#getHoles()将为孔数组。

OSMBonusPack lib提供从osmdroid覆盖(包括多边形)到GeoJSON(即Json)的数据

OSMBonusPack lib提供了从osmdroid覆盖(包括多边形)到GeoJSON(即Json)的转换

java.lang.SecurityException: Can't make method constructor accessible
    at java.lang.reflect.Constructor.setAccessible(Constructor.java:336)
    at com.google.gson.internal.reflect.PreJava9ReflectionAccessor.makeAccessible(PreJava9ReflectionAccessor.java:31)
    at com.google.gson.internal.ConstructorConstructor.newDefaultConstructor(ConstructorConstructor.java:103)
    at com.google.gson.internal.ConstructorConstructor.get(ConstructorConstructor.java:85)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:101)
    at com.google.gson.Gson.getAdapter(Gson.java:458)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
    at com.google.gson.Gson.getAdapter(Gson.java:458)
    at com.google.gson.internal.bind.ArrayTypeAdapter$1.create(ArrayTypeAdapter.java:48)
    at com.google.gson.Gson.getAdapter(Gson.java:458)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)...