2016-07-13 76 views
0

在android應用程序中,我在執行gson.toJson()時遇到內存問題。我做下面的步驟:gson.toJson()給Realm帶來內存問題

  1. 檢索從境界數據庫的用戶細節,用戶類
  2. 然後更新,如姓名,電話號碼
  3. 使用gson.toJson將其轉換爲字符串表示User類值()

這次它給我記憶錯誤。用戶類也與ImageDetails和LocationDetails實體類有關係。

錯誤: 「後臺粘併發標記清掃」

+0

能不能請發表您的類.. – Debu

+0

可能這個線程會幫助你 - http://stackoverflow.com/questions/34735639/retrofit-realmlist-gson-stuck-in-a-loop-until-out-of-memory – Debu

+0

@Debu我已經嘗試瞭解決方案給你的鏈接,但沒有運氣。你需要實體類代碼嗎? –

回答

0

這裏是我的問題解決了

  1. 添加以下行中的build.gradle(項目) -

    classpath「io.realm:realm-gradle-plugin:1.1.0」

  2. 在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你的類名

    1. 創建一個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; 
      }} 
      
    +0

    在你的建議中你正在創建JsonObject。而不是爲什麼我不能直接創建通過Realm更新的對象的字符串表示形式。這是Realm的限制嗎? –

    +0

    Realm只允許在擴展RealmObject的類中寫入getter和setter,如果它有幫助,請接受答案.. – Debu

    0

    另一種解決方案是具有RawUser類不延伸RealmObject並在此新的類使用Gson.toJson。 你可以在你的領域用戶類添加一個getRawUser方法,然後只需要編寫

    gson.toJson(user.getRawUser()); 
    

    ,讓您的序列化對象