【问题标题】:Gson overflows with StackOverflow exception on "$Types.resolve"Gson 在“$Types.resolve”上溢出 StackOverflow 异常
【发布时间】:2014-10-04 19:27:12
【问题描述】:

我有一个 ArrayList 和一个 ArrayList,gson 在检索自定义对象 ArrayList 时工作得非常好,但在检索 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)

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

【问题讨论】:

  • 您是否向Gson注册了任何自定义类型处理程序?

标签: java android json arraylist gson


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      • 2012-08-30
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多