简体   繁体   中英

Retrofit GSON Stackoverflowerror

I am using Retrofit with Gson for making HTTP requests. But after the request, I get this below error. Can someone please help me in solving this ?

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;
    }
}

Your EventsData class only contains a List<EventsData> , which seems like a recipe for recursive hell. Perhaps this is a bug?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM