java - 反序列化Android Retrofit时Gson stackOverflown

标签 java android gson retrofit2

我将 retrofit2 与 Gson 结合使用来使用 API 休息点。 我有一个 CarOption 模型:

public class CarOption {

private String              name;
private String              label;
private boolean             isActive;
private String              type;
private Integer             onglet;
private Integer             position;
private List<CarOptionData> data;
private View                view;

和一个 CarForm 模型:

public class CarForm {

// DEBUG
private static final String TAG = CarForm.class.getName();

private ArrayList<CarOption>        fields = new ArrayList<>();
private static CarOptionComparator  coc = new CarOptionComparator();

private static ArrayList<CarOption> tab0 = null;
private static ArrayList<CarOption> tab1 = null;
private static ArrayList<CarOption> tab2 = null;
private static ArrayList<CarOption> tab3 = null;

public static void downloadCarForm(final Context context, final IRequestResponseListener cb) {
    Retrofit retrofit = RetrofitSingleton.getInstance();

    IWebServiceApi apiService = retrofit.create(IWebServiceApi.class);
    Call<CarForm>   call = apiService.getCarForm(User.getAccessToken());
    call.enqueue(new Callback<CarForm>() {
        @Override
        public void onResponse(Response<CarForm> response, Retrofit retrofit) {
            int statusCode = response.code();
            if (statusCode == 200 || statusCode == 201) {
                CarForm carForm = response.body(); // STACKOVERFLOWN ERROR FROM GSON
                carForm.unCrashOnglet(carForm.fields);
                Collections.sort(carForm.fields, coc);
                CarForm.setTab0(createTab(context, carForm.getFields(), 0));
                CarForm.setTab1(createTab(context, carForm.getFields(), 1));
                CarForm.setTab2(createTab(context, carForm.getFields(), 2));
                CarForm.setTab3(createTab(context, carForm.getFields(), 3));
                if (cb != null)
                    cb.onSuccess();

当 Gson 尝试反序列化我的对象时,出现 stackoverflown 错误。我阅读了有关由对父对象的引用引起的可能错误的信息,但我没有。看不出错误从何而来。 它可能链接到“选项卡”arrayList 属性,因为它在我创建它们之前正在工作。

这是错误:

W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:334)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
 W/System.err:     at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:358)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:155)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:97)
 W/System.err:     at com.google.gson.Gson.getAdapter(Gson.java:407)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:136)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:49)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:106)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:105)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:161)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:97)
 W/System.err:     at com.google.gson.Gson.getAdapter(Gson.java:407)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getFieldAdapter(ReflectiveTypeAdapterFactory.java:136)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.access$100(ReflectiveTypeAdapterFactory.java:49)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.<init>(ReflectiveTypeAdapterFactory.java:106)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:105)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:161)
 W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:97)
 W/System.err:     at com.google.gson.Gson.getAdapter(Gson.java:407)

你对这个问题有什么想法吗?

提前致谢。

最佳答案

正如评论中所说:

public class CarOption {
...
private View                view;

变成了:

public class CarOption {
...
private Object                view;

解决了我的问题。然后,当我需要访问它时,我将它转换回 View 。

关于java - 反序列化Android Retrofit时Gson stackOverflown,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35362337/

相关文章:

java - REGEX 匹配多个条件

java - Spring ModelMap 实现

android - 使用 RxAndroidBle,我如何订阅对特性的写入响应?

java - BadPaddingException 使用 AES 算法解密 java

android - 空指针异常-用gson android解析json

java - Spring Integration FtpOutboundGateway setLocalDirectory 与系统属性和#remoteDirectory

java - 无法理解为什么此方法未解决

android - 从安卓市场安装。未知原因 102

android - 如何忽略用于改造的模型中的某些变量

java - 为什么 Google Gson.toJson 会丢失数据