Android java.lang.StackOverflowerError位于com.google.gson.internal.$gson$Types.resolve($gson$Types.java:378)

Android java.lang.StackOverflowerError位于com.google.gson.internal.$gson$Types.resolve($gson$Types.java:378),android,gson,realm,retrofit,Android,Gson,Realm,Retrofit,我正在我的Android应用程序中实现“领域”。我通过调用服务并借助“改装库”获取JSON数据 我的模范班是-- 下面是我处理请求的OnfieldAPI接口-- 我在谷歌上搜索了这个错误,但还没有找到解决方案,所以对于这个问题的任何帮助都将不胜感激。如果我能提供更多的信息,也请告诉我。多谢各位 看到这个GameResponse类也会很好 我不是100%确定,但我认为这是扩展RealmObject造成的。尝试删除此继承以进行测试,然后启动改装请求。如果一切正常,或者你会遇到其他异常(比如解析),我

我正在我的Android应用程序中实现“领域”。我通过调用服务并借助“改装库”获取JSON数据

我的模范班是--

下面是我处理请求的OnfieldAPI接口--


我在谷歌上搜索了这个错误,但还没有找到解决方案,所以对于这个问题的任何帮助都将不胜感激。如果我能提供更多的信息,也请告诉我。多谢各位

看到这个GameResponse类也会很好

我不是100%确定,但我认为这是扩展RealmObject造成的。尝试删除此继承以进行测试,然后启动改装请求。如果一切正常,或者你会遇到其他异常(比如解析),我们将100%确定RealmObject对此负责

然后需要有两个独立的类:一个用于JSON表示,另一个用于使用领域的持久性。当然,您需要一些映射器类来转换JSON->Realm和reverse

编辑

另一种方法(而不是映射JSON表示类和RealmObject子类)是为改造中使用的GSON创建自己的TypeAdapter(当然,如果您正在使用它的话)。一些供参考的链接:


如果能看到这个GameResponse类也会很好

我不是100%确定,但我认为这是扩展RealmObject造成的。尝试删除此继承以进行测试,然后启动改装请求。如果一切正常,或者你会遇到其他异常(比如解析),我们将100%确定RealmObject对此负责

然后需要有两个独立的类:一个用于JSON表示,另一个用于使用领域的持久性。当然,您需要一些映射器类来转换JSON->Realm和reverse

编辑

另一种方法(而不是映射JSON表示类和RealmObject子类)是为改造中使用的GSON创建自己的TypeAdapter(当然,如果您正在使用它的话)。一些供参考的链接:


看起来这是在序列化过程中发生的。
检查此要点以了解正确的设置:

看起来它是在序列化过程中发生的。 检查此要点以了解正确的设置:

两种解决方案:

1.)更新到不古老的领域版本,如1.2.0

有关这方面的更多信息,请参阅我的教程/文章,也可从以下网站获得:

2.)添加此排除策略

Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return f.getDeclaringClass().equals(RealmObject.class);
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
})
.create();
Gson Gson=new GsonBuilder()
.SetExclutionStrategy(新的ExclutionStrategy)(){
@凌驾
公共布尔值shouldSkipField(字段属性f){
返回f.getDeclaringClass().equals(RealmObject.class);
}
@凌驾
公共布尔shouldSkipClass(类clazz){
返回false;
}
})
.create();
两种解决方案:

1.)更新到不古老的领域版本,如1.2.0

有关这方面的更多信息,请参阅我的教程/文章,也可从以下网站获得:

2.)添加此排除策略

Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return f.getDeclaringClass().equals(RealmObject.class);
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
})
.create();
Gson Gson=new GsonBuilder()
.SetExclutionStrategy(新的ExclutionStrategy)(){
@凌驾
公共布尔值shouldSkipField(字段属性f){
返回f.getDeclaringClass().equals(RealmObject.class);
}
@凌驾
公共布尔shouldSkipClass(类clazz){
返回false;
}
})
.create();


@Pawal Urbal Yes u r right,这是因为扩展了RealmObject。对于“GamesResponse”类,请检查我更新的问题。@DnyaneshM Gamesponse类看起来不错,我认为这不是问题所在。因此,您必须实现两个层——JSON和Realm,并引入映射器。另一种方法是为改装中使用的Gson实现自定义TypeAdapter:并作为参考。@Pawal Urbal Yes u r right,这是因为扩展了RealmObject。对于“GamesResponse”类,请检查我更新的问题。@DnyaneshM Gamesponse类看起来不错,我认为这不是问题所在。因此,您必须实现两个层——JSON和Realm,并引入映射器。另一种方法是为改造中使用的Gson实现自定义TypeAdapter:并供参考。您使用的是旧版本的Realm吗?在这种情况下,您需要一个自定义类型适配器,如下所述:@ChristianMelchior我正在使用'io.realm:realm android:0.82.1'依赖项,然后您需要添加我链接到的自定义排除策略。可能重复您为什么使用0.82.1?它非常古老,远没有0.88.3那么稳定,甚至比不上1.1.1。你是从Ravi Tamada那里得到你的想法的吗?该教程比没有教程更糟糕。您使用的是旧版本的Realm吗?在这种情况下,您需要一个自定义类型适配器,如下所述:@ChristianMelchior我正在使用'io.realm:realm android:0.82.1'依赖项,然后您需要添加我链接到的自定义排除策略。可能重复您为什么使用0.82.1?它非常古老,远没有0.88.3那么稳定,甚至比不上1.1.1。你是从Ravi Tamada那里得到你的想法的吗?该教程比没有教程更糟糕。请让我知道我应该在哪个文件中添加上述代码..?从技术上讲,您在创建
Gson
实例时需要它。您在某个地方有
Gson Gson=new Gson()
,您应该将其替换为此。第一个解决方案,即“1”)更新到一个不古老的领域版本,例如“1.2.0”对我有效。。我将Realm版本更新为2.2.0。我倾向于推荐1.2.0而不是2.x,因为2.x分支还不支持Blackberry设备。请让我知道我应该在哪个文件中添加上述代码..?从技术上讲,您需要它来创建
Gson
实例。您在某处有
Gson Gson=new Gson()
,您应该用
public void requestAllgames() {
        Globals globals = Globals.getInstance();
        loading.setVisibility(View.VISIBLE);
        Retrofit newRetro = new Retrofit.Builder()
                .baseUrl(globals.getBaseAddress())
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        OnfieldAPI loginCheckApi = newRetro.create(OnfieldAPI.class);
        Call<GamesResponse> callPOST = loginCheckApi.getactivegames(globals.getToken());
        callPOST.enqueue(new Callback<GamesResponse>() {
            @Override
            public void onResponse(Call<GamesResponse> call, Response<GamesResponse> response) {

               // My Success code here.

            }

            @Override
            public void onFailure(Call<GamesResponse> call, Throwable t)
            {
                // My Failure Code Here
            }
        });
    }
public class GamesResponse {

    @SerializedName("status")
    @Expose
    private Integer status;
    @SerializedName("msg")
    @Expose
    private String msg;
    @SerializedName("payload")
    @Expose
    private List<Game> payload = new ArrayList<Game>();

    /**
     * No args constructor for use in serialization
     *
     */
    public GamesResponse() {
    }

    /**
     *
     * @param status
     * @param payload
     * @param msg
     */
    public GamesResponse(Integer status, String msg, List<Game> payload) {
        this.status = status;
        this.msg = msg;
        this.payload = payload;
    }

    /**
     *
     * @return
     * The status
     */
    public Integer getStatus() {
        return status;
    }

    /**
     *
     * @param status
     * The status
     */
    public void setStatus(Integer status) {
        this.status = status;
    }

    /**
     *
     * @return
     * The msg
     */
    public String getMsg() {
        return msg;
    }

    /**
     *
     * @param msg
     * The msg
     */
    public void setMsg(String msg) {
        this.msg = msg;
    }

    /**
     *
     * @return
     * The payload
     */
    public List<Game> getPayload() {
        return payload;
    }

    /**
     *
     * @param payload
     * The payload
     */
    public void setPayload(List<Game> payload) {
        this.payload = payload;
    }
}
 java.lang.StackOverflowError at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)                                                                                at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:378)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:383)
at com.google.gson.internal.$Gson$Types.resolve($Gson$Types.java:358)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:158)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
at com.google.gson.Gson.getAdapter(Gson.java:423)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:115)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:164)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:100)
at com.google.gson.Gson.getAdapter(Gson.java:423)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTy
Gson gson = new GsonBuilder()
.setExclusionStrategies(new ExclusionStrategy() {
    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return f.getDeclaringClass().equals(RealmObject.class);
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return false;
    }
})
.create();
 public interface OnfieldAPI 
{
Globals global=Globals.getInstance();
String email=global.getUserName();
@FormUrlEncoded
@POST("games")
Call<GamesResponse> getactivegames(@Header("authtoken") String authtoken);
}
@FormUrlEncoded