在android應用程序中,我在執行gson.toJson()時遇到內存問題。我做下面的步驟:gson.toJson()給Realm帶來內存問題
- 檢索從境界數據庫的用戶細節,用戶類
- 然後更新,如姓名,電話號碼
- 使用gson.toJson將其轉換爲字符串表示User類值()
這次它給我記憶錯誤。用戶類也與ImageDetails和LocationDetails實體類有關係。
錯誤: 「後臺粘併發標記清掃」
在android應用程序中,我在執行gson.toJson()時遇到內存問題。我做下面的步驟:gson.toJson()給Realm帶來內存問題
這次它給我記憶錯誤。用戶類也與ImageDetails和LocationDetails實體類有關係。
錯誤: 「後臺粘併發標記清掃」
這裏是我的問題解決了
添加以下行中的build.gradle(項目) -
classpath「io.realm:realm-gradle-plugin:1.1.0」
在build.grad中添加以下行樂(APP) -
應用插件:'境界,Android的
以上2線將包括最新版本的境界到您的項目。
使用下面的代碼到JSON的obj轉換爲字符串 -
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;
}
})
.registerTypeAdapter(Class.forName("com.wandertrails.realm.UserDetails"), new UserDetailsSerilizer())
.create();
Log.e("Json Value",gson.toJson(new UserDetails()));
變化com.wandertrails.realm.UserDetails你的類名
創建一個JsonSerializer類來手動序列化類 -
public class UserDetailsSerilizer implements JsonSerializer<UserDetails> {
@Override
public JsonElement serialize(UserDetails src, Type typeOfSrc, JsonSerializationContext context) {
final JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("dob",src.getDob());
jsonObject.addProperty("emailAddress",src.getEmailAddress());
jsonObject.addProperty("gender",src.getGender());
jsonObject.addProperty("id",src.getId());
return jsonObject;
}}
在你的建議中你正在創建JsonObject。而不是爲什麼我不能直接創建通過Realm更新的對象的字符串表示形式。這是Realm的限制嗎? –
Realm只允許在擴展RealmObject的類中寫入getter和setter,如果它有幫助,請接受答案.. – Debu
另一種解決方案是具有RawUser類不延伸RealmObject並在此新的類使用Gson.toJson。 你可以在你的領域用戶類添加一個getRawUser方法,然後只需要編寫
gson.toJson(user.getRawUser());
,讓您的序列化對象
能不能請發表您的類.. – Debu
可能這個線程會幫助你 - http://stackoverflow.com/questions/34735639/retrofit-realmlist-gson-stuck-in-a-loop-until-out-of-memory – Debu
@Debu我已經嘗試瞭解決方案給你的鏈接,但沒有運氣。你需要實體類代碼嗎? –