领域块 Gson 库
Realm blocks Gson library
我对 Realm 库有疑问。我在我的应用程序中实现了它,包括库。开始创建一些 realmObjects,以便与我的应用程序一起使用,然后我尝试启动该应用程序,但令我惊讶的是,它卡在了第一页上,这很奇怪,因为那里没有 Realm 代码。
经过一些调试后,我发现它在以下行崩溃了:
String json = gson.toJson(user);
Gson 不为空。我也尝试取出领域,看看这是否是问题所在,并且没有它也能正常工作。
这是 crashlytics 告诉我的,几分钟后(它没有直接崩溃,只是被阻塞了一段时间,然后才崩溃):
Fatal Exception: java.lang.OutOfMemoryError
OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available
java.lang.Object.wait (Object.java)
java.lang.Thread.run (Thread.java:818)
dalvik.system.VMRuntime.concurrentGC (VMRuntime.java)
java.lang.Thread.run (Thread.java:818)
java.lang.Object.wait (Object.java)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:587)
com.crashlytics.android.internal.am.a (SourceFile:44)
com.crashlytics.android.internal.aa.run (SourceFile:13)
java.lang.Thread.run (Thread.java:818)
java.lang.Object.wait (Object.java)
java.util.concurrent.FutureTask.get (FutureTask.java:162)
com.crashlytics.android.v.a (SourceFile:1936)
com.crashlytics.android.v.uncaughtException (SourceFile:307)
java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:693)
java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:690)
编辑:我传递给 gson(用户)的 Item 是一个名为 UserRecord 的 class 实例,它扩展了 RealmObject。
会不会是因为它是一个 realmObject 而不是标准的 android 对象?
我发现了问题:问题是我使用的是:
Gson gson = new Gson();
而不是我应该使用的:
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();
我对 Realm 库有疑问。我在我的应用程序中实现了它,包括库。开始创建一些 realmObjects,以便与我的应用程序一起使用,然后我尝试启动该应用程序,但令我惊讶的是,它卡在了第一页上,这很奇怪,因为那里没有 Realm 代码。 经过一些调试后,我发现它在以下行崩溃了:
String json = gson.toJson(user);
Gson 不为空。我也尝试取出领域,看看这是否是问题所在,并且没有它也能正常工作。 这是 crashlytics 告诉我的,几分钟后(它没有直接崩溃,只是被阻塞了一段时间,然后才崩溃):
Fatal Exception: java.lang.OutOfMemoryError
OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available
java.lang.Object.wait (Object.java)
java.lang.Thread.run (Thread.java:818)
dalvik.system.VMRuntime.concurrentGC (VMRuntime.java)
java.lang.Thread.run (Thread.java:818)
java.lang.Object.wait (Object.java)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:587)
com.crashlytics.android.internal.am.a (SourceFile:44)
com.crashlytics.android.internal.aa.run (SourceFile:13)
java.lang.Thread.run (Thread.java:818)
java.lang.Object.wait (Object.java)
java.util.concurrent.FutureTask.get (FutureTask.java:162)
com.crashlytics.android.v.a (SourceFile:1936)
com.crashlytics.android.v.uncaughtException (SourceFile:307)
java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:693)
java.lang.ThreadGroup.uncaughtException (ThreadGroup.java:690)
编辑:我传递给 gson(用户)的 Item 是一个名为 UserRecord 的 class 实例,它扩展了 RealmObject。 会不会是因为它是一个 realmObject 而不是标准的 android 对象?
我发现了问题:问题是我使用的是:
Gson gson = new Gson();
而不是我应该使用的:
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();