我有一个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)
并且这种情况持续很长时间。
答案 0 :(得分:5)
您正在尝试序列化LinearLayouts?这是非常糟糕的做法。
您应该在这些LinearLayouts中序列化所需的数据,并在反序列化数据时重新创建LinearLayout。
答案 1 :(得分:1)
在数据结构序列化器中,堆栈溢出有两个主要原因。 1)简单的深度递归限制(深度太多的对象)或2)无限的自引用循环。