Я использую retrofit2 в сочетании с Gson, чтобы потреблять точку останова API. У меня есть CarOption модель:Gson stackOverflown при десериализации Android Retrofit
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();
У меня есть ошибка stackoverflown когда Gson пытается десериализации моего объекта. Я читал о возможной ошибке, вызванной ссылкой на родительский объект, но у меня его нет. Невозможно увидеть, откуда исходит ошибка. Он может быть связан с атрибутами атрибута «tab» array, поскольку он работал до того, как я их создал.
Вот ошибка:
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)
Есть ли у вас какие-либо идеи по этому вопросу?
Заранее благодарен.
Возможно, вы захотите переместить 'private List данные;' в 'CarForm' –
Blackbelt
Я думаю, что у вас есть круговая зависимость в ваших моделях. Круговая зависимость - это когда у вас есть 'A', ссылающийся на' B', который снова ссылается на 'A'. Было бы более полезно, если бы вы опубликовали все классы моделей, связанные с «CarForm» –
Что представляет собой класс вида в этом контексте? –