2015-06-17 2 views
2

У меня много проблем с попыткой получить возможность доработать мой JSON, я не могу окутать голову. Всякий раз, когда я бегу мой Дооснащаемый код я получаю аварии:Невозможно разобрать JSON с дооснащением и GSON - переполнение стека

Caused by: java.lang.StackOverflowError: stack size 1036KB 
     at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:537) 

и затем позже:

E/JavaBinder﹕ !!! FAILED BINDER TRANSACTION !!! 

Моя JSON выглядит следующим образом:

{ 
    "199" : { 
    "anncontent" : "content", 
    "anndisplaydate" : "Tuesday February 11", 
    "announcements_id" : "199", 
    "anntitle" : "Newsletter Issue 17" 
}, 
"264" : { 
    "anncontent" : "content", 
    "anndate" : "2014-10-03 22:37:32", 
    "anndisplaydate" : "Friday October 03", 
    "announcements_id" : "264", 
    "anntitle" : "Timetable" 
}, 
"267" : { 
    "anncontent" : "content", 
    "anndate" : "2014-10-10 02:41:32", 
    "anndisplaydate" : "Friday October 10", 
    "announcements_id" : "267", 
    "anntitle" : "Author talk with Hugh O’Brien" 
} 
}  

мое объявление полей класса выглядит следующим образом :

private String anntitle; 
private String anncontent; 
private String anndisplaydate; 
private Date anndate; 
private String announcements_id; 

My Интерфейс выглядит следующим образом:

public interface AnnouncementsAPI { 
@GET("/announcements.json") 
ArrayList<Announcement> listAnnouncements();} 

И, наконец, мой дооснащения код выглядит следующим образом:

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint("https://MYURL") 
      .build(); 
    AnnouncementsAPI announcementsAPI = restAdapter.create(AnnouncementsAPI.class); 
    ArrayList<Announcement> announcements = announcementsAPI.listAnnouncements(); 

    Log.d("RETROFIT", "Announcemnts: " + announcements.toString()); 

Я просто пытаюсь получить ArrayList объектов объявление, и я не знаю, как пойдите об этом. Извините, если это было задано раньше, но все предыдущие вопросы/примеры, которые я нашел, использовали JSON, который казался мне совершенно другим.

Если у кого-то есть идеи, это было бы очень признательно. Благодаря

+0

Похоже, у меня очень похожая проблема. Вы когда-нибудь выясняли, что происходит не так? –

ответ

1

Попробуйте использовать retrofit callback для интерфейса, например:

Интерфейс

public interface AnnouncementsAPI { 
    @GET("/announcements.json") 
    void listAnnouncements(Callback<ListAnnouncement> callback); 
} 

Если вы хотите возвращение быть список, Инкапсулируйте класс объявление в другой класс, как так:

ListAnnouncement.Java

public class ListAnnouncement { 
    private List<Announcement> fieldname; //match the fieldname with the field name on the JSON 

    //add getter-setter as needed 
} 

модифицированное Код

RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint("https://MYURL") 
      .build(); 
AnnouncementsAPI announcementsAPI = restAdapter.create(AnnouncementsAPI.class); 

final ListAnnouncement listAnnouncement; 
announcementsAPI.listAnnouncements(new Callback<ListAnnouncement>() { 
     @Override 
     public void success(ListAnnouncement data, Response response) { 
      listAnnouncement = data; 
     } 

     @Override 
     public void failure(RetrofitError error) { 

     } 
    } 
); 

После этого, вы можете использовать fieldname на ListAnnouncementClass, чтобы получить список Announcement.

Важно

Код выше будет работать, если JSON действительно JSON Array, судя по всему, вы Отдача нескольких Announcement объектов с другим ключом, который не является JSON Array

2

Если все объекты расширяют один и тот же базовый объект, возникает исключение StackOverflowError: размер стека размером 1036 КБ.

пример:
class BaseBean

class A extends BaseBean (class A содержит ссылку на class A и class B)
class B extends BaseBean
class C extends BaseBean

Реализация выше случае, существует большая вероятность того, для происходящих же исключение. (не распространяются на BaseBean).

-1

Попробуйте это. Ответ должен быть в этом формате HashMap<String,Announcement>

Смежные вопросы