簡體   English   中英

改造GSON StackoverflowError

[英]Retrofit GSON Stackoverflowerror

我正在將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;
    }
}

您的EventsData類僅包含List<EventsData> ,這似乎是遞歸地獄的秘訣。 也許這是一個錯誤?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM