Gson在“$ Types.resolve”上溢出StackOverflow异常

时间:2014-08-11 20:54:51

标签: java android json arraylist gson

我有一个ArrayList和一个ArrayList,并且在检索自定义对象ArrayList时gson工作正常,但在检索LinearLayout ArrayList时会导致stackOverflow异常。

代码:

public Semester(JSONObject json) throws JSONException {

coursesAsString = json.getString(JSON_COURSES);
Type coursesType = new TypeToken<ArrayList<Course>>(){}.
courses = gson.fromJson(coursesAsString, // <--- THIS PART WORKS FINE

courseLayoutArrayAsString = json.getString(JSON_COURSELAYOUTARRAY);
Type courseLayoutArrayType = new TypeToken<ArrayList<LinearLayout>>(){}.getType();
courseLayoutArray = gson.fromJson(courseLayoutArrayAsString, courseLayoutArrayType); // <---- this line
//is where the problem lies. For some reason 
//"gson.fromJson(courseLayoutArrayAsString, courseLayoutArrayType)" causes a stackOverflow exception.

}

以下是例外:

java.lang.StackOverflowError
        at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
        at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)
        at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:375)
        at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:380)

并且这种情况持续很长时间。

2 个答案:

答案 0 :(得分:5)

您正在尝试序列化LinearLayouts?这是非常糟糕的做法。

您应该在这些LinearLayouts中序列化所需的数据,并在反序列化数据时重新创建LinearLayout。

答案 1 :(得分:1)

在数据结构序列化器中,堆栈溢出有两个主要原因。 1)简单的深度递归限制(深度太多的对象)或2)无限的自引用循环。