构造函数JsonPrimitive(Object)不可见

时间:2015-06-01 21:25:43

标签: java android json gson

我正在尝试将一个arrayList包装为Json字符串,以便将其发送到带有Gson库的服务器,但我收到此错误The constructor JsonPrimitive(Object) is not visible

我该如何解决?

我感谢任何帮助。

SelectedRoute类:

public class SelectedRoute {

    ArrayList<Integer> selected;

    public SelectedRoute(ArrayList<Integer> selected) {
        this.selected = selected;
    }

    public ArrayList<Integer> getSelected() {
        return selected;
    }

    public void setSelected(ArrayList<Integer> selected) {
        this.selected = selected;
    }


}

SelectedRouteSerializer类:

   public class SelectedRouteSerializer implements JsonSerializer<SelectedRoute>{

        @Override
        public JsonElement serialize(SelectedRoute select, Type arg1,
                JsonSerializationContext arg2) {
            JsonObject result = new JsonObject();
              //The error is here.
            result.add("selected", new JsonPrimitive(select.getSelected()));


            return result;
        }


    }

1 个答案:

答案 0 :(得分:1)

JSON primitive

中的任何一个
string
number
object
array
true
false
null

这些用Gson JsonPrimitve表示,包含四个构造函数:一个用于Boolean,一个用于String,一个用于Number,另一个用于Character (一个字符String)。 JsonPrimitive有一个包私有构造函数,它可以接受您的ArrayList值,但是,如果是包私有,则代码无法访问它。

Java ArrayList不能表示为JSON原语。它应该是一个JSON数组。

您现在已经修改了自己的问题,但这里有一个直接构建JsonObject的示例

ArrayList<Integer> arrayList = new ArrayList<>(Arrays.asList(1,2,3));
JsonObject jsonObject = new JsonObject();
JsonArray jsonArray = new JsonArray();
for (Integer value : arrayList) {
    jsonArray.add(new JsonPrimitive(value));
}
jsonObject.add("selected", jsonArray);