【发布时间】:2016-11-30 07:13:14
【问题描述】:
我正在我的 Android 应用中实现“RealM”。我在“改造库”的帮助下通过调用服务来获取 JSON 数据。
我的模型类是--
public class Game extends RealmObject
{
@Expose
@SerializedName("gameID")
@PrimaryKey
private int gameID;
@Expose
@SerializedName("gameName")
private String gameName;
@Expose
@SerializedName("gameFormat")
private String gameFormat;
@Expose
@SerializedName("gameType")
private String gameType;
@Expose
@SerializedName("imageUrl")
private String imageUrl;
public Game() {
super();
// TODO Auto-generated constructor stub
}
public Game(int gameID, String gameName, String gameFormat, String gamType, String imageUrl) {
super();
this.gameID = gameID;
this.gameName = gameName;
this.gameFormat = gameFormat;
this.gameType = gamType;
this.imageUrl = imageUrl;
}
public int getGameID() {
return gameID;
}
public void setGameID(int gameID) {
this.gameID = gameID;
}
public String getGameName() {
return gameName;
}
public void setGameName(String gameName) {
this.gameName = gameName;
}
public String getGameFormat() {
return gameFormat;
}
public void setGameFormat(String gameFormat) {
this.gameFormat = gameFormat;
}
public String getGameType() {
return gameType;
}
public void setGameType(String gamType) {
this.gameType = gamType;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
}
以下是我处理请求的 OnfieldAPI 接口--
public interface OnfieldAPI
{
Globals global=Globals.getInstance();
String email=global.getUserName();
@POST("games")
Call<GamesResponse> getactivegames(@Header("authtoken") String authtoken);
}
这就是我调用网络服务以获取游戏响应的方式--
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
}
});
}
下面是我的“GamesResponse”课程
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
我在谷歌上搜索了这个错误,但还没有找到解决方案,所以对于这个问题的任何帮助将不胜感激。也让我知道我是否可以提供更多信息。谢谢你。
【问题讨论】:
-
您使用的是旧版本的 Realm 吗?在这种情况下,您需要一个自定义类型适配器,如下所述:realm.io/docs/java/0.88.0/#gson
-
@ChristianMelchior 我正在使用 'io.realm:realm-android:0.82.1' 依赖项
-
那你需要添加我链接的自定义排除策略。
-
你为什么使用 0.82.1?它非常非常古老,甚至远不及 0.88.3 或更稳定的 1.1.1。你的想法是从 Ravi Tamada 那里得到的吗?那个教程比没有教程还糟糕。
标签: android gson realm retrofit