Java GSON StackOverflowerr的改造
我正在使用Gson的改进来进行HTTP请求。但是在请求之后,我得到以下错误。有人能帮我解决这个问题吗Java GSON StackOverflowerr的改造,java,android,gson,retrofit2,Java,Android,Gson,Retrofit2,我正在使用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$WildcardType
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)
原因:java.lang.StackOverflower错误:堆栈大小1037KB
位于com.google.gson.internal.$gson$Types.checkNotPrimitive($gson$Types.java:434)
位于com.google.gson.internal.$gson$Types$wildcardtypeinpl.($gson$Types.java:544)
在com.google.gson.internal.$gson$Types.canonicalize($gson$Types.java:111)
位于com.google.gson.internal.$gson$Types$wildcardtypeinpl.($gson$Types.java:553)
在com.google.gson.internal.$gson$Types.canonicalize($gson$Types.java:111)
位于com.google.gson.internal.$gson$Types$wildcardtypeinpl.($gson$Types.java:546)
在com.google.gson.internal.$gson$Types.canonicalize($gson$Types.java:111)
位于com.google.gson.internal.$gson$Types$wildcardtypeinpl.($gson$Types.java:553)
在com.google.gson.internal.$gson$Types.canonicalize($gson$Types.java:111)
位于com.google.gson.internal.$gson$Types$wildcardtypeinpl.($gson$Types.java:546)
在com.google.gson.internal.$gson$Types.canonicalize($gson$Types.java:111)
位于com.google.gson.internal.$gson$Types$wildcardtypeinpl.($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) {
}
});
if(改装==null){
System.out.println(“建筑:”);
Gson Gson=new GsonBuilder()
.SetExclutionStrategy(新的ExclutionStrategy)(){
@凌驾
公共布尔值shouldSkipField(字段属性f){
返回f.getDeclaringClass().equals(建议使用Tab.class);
}
@凌驾
公共布尔shouldSkipClass(类clazz){
返回false;
}
})
.create();
改装=新改装.Builder()
.baseUrl(基本url)
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
}
尝试
{
EventsApi eventsApiService=reformation.create(EventsApi.class);
Call Call=eventsApiService.getEvents(值1、值2、值3、值4、值5、值6);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
List movies=response.body();
setAdapter(新的EventsAdapter(movies,getContext());
System.out.println(“接收的电影数量:+movies.size());
}
@凌驾
失败时公共无效(调用调用,可丢弃的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
);
}
公共接口事件SAPI{
@获取(“场馆/搜索”)
调用getEvents(
@查询(“a”)字符串值1,
@查询(“b”)字符串值2,
@查询(“c”)字符串值3,
@查询(“d”)字符串值4,
@查询(“e”)字符串值5,
@查询(“f”)字符串值6
);
}
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;
}
}
公共类事件数据
{
私人名单结果;
公共事件数据()
{ }
公共列表getResults(){
返回结果;
}
公共void setResults(列出结果){
这个结果=结果;
}
}
您的EventsData
类只包含一个列表
,这看起来像是一个递归地狱的配方。也许这是一个bug