【问题标题】:Retrofit GSON Stackoverflowerror改造 GSON Stackoverflow 错误
【发布时间】:2017-11-01 17:20:25
【问题描述】:

我正在使用 Retrofit 和 Gson 来发出 HTTP 请求。但是在请求之后,我得到了以下错误。有人可以帮我解决这个问题吗?

Caused by: java.lang.StackOverflowError: stack size 1037KB
    at com.google.gson.internal.$Gson$Types.checkNotPrimitive($Gson$Types.java:434)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:544)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:111)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:553)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:111)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:546)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:111)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:553)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:111)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:546)
    at com.google.gson.internal.$Gson$Types.canonicalize($Gson$Types.java:111)
    at com.google.gson.internal.$Gson$Types$WildcardTypeImpl.<init>($Gson$Types.java:553)

MainActivity.java

if (retrofit == null) {
            System.out.println("building:");
            Gson gson = new GsonBuilder()
                    .setExclusionStrategies(new ExclusionStrategy() {
                        @Override
                        public boolean shouldSkipField(FieldAttributes f) {
                            return f.getDeclaringClass().equals(RecommendedTab.class);
                        }

                        @Override
                        public boolean shouldSkipClass(Class<?> clazz) {
                            return false;
                        }
                    })
                    .create();
            retrofit = new Retrofit.Builder()
                    .baseUrl(base_url)
                    .addConverterFactory(GsonConverterFactory.create(gson))
                    .build();
        }

        try
        {
            EventsApi eventsApiService = retrofit.create(EventsApi.class);
            Call<List<EventsData>> call = eventsApiService.getEvents(value1, value2, value3, value4, value5, value6);
            call.enqueue(new Callback<List<EventsData>>() {
                @Override
                public void onResponse(Call<List<EventsData>> call, Response<List<EventsData>> response) {
                    List<EventsData> movies = response.body();
                    recyclerView.setAdapter(new EventsAdapter(movies, getContext()));
                    System.out.println("Number of movies received: " + movies.size());
                }

                @Override
                public void onFailure(Call<List<EventsData>> call, Throwable t) {

                }
            });

EventsApi.interface

public interface EventsApi {
    @GET("venues/search")
    Call<List<EventsData>> getEvents(
            @Query("a") String value1,
            @Query("b") String value2,
            @Query("c") String value3,
            @Query("d") String value4,
            @Query("e") String value5,
            @Query("f") String value6
    );
}

EventsData.java

public class EventsData
{
    private List<EventsData> results;

    public EventsData()
    { }

    public List<EventsData> getResults() {
        return results;
    }
    public void setResults(List<EventsData> results) {
        this.results = results;
    }
}

【问题讨论】:

    标签: java android gson retrofit2


    【解决方案1】:

    你的EventsData 类只包含一个List&lt;EventsData&gt;,这似乎是递归地狱的秘诀。也许这是一个错误?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-30
      • 1970-01-01
      • 2016-04-29
      • 2018-11-19
      • 1970-01-01
      • 2014-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多