gson.toJson()给出了Realm的内存问题

时间:2016-07-13 10:15:27

标签: android gson

在android应用程序中,我在执行gson.toJson()时遇到内存问题。我正在做以下步骤:

  1. 从Realm数据库检索用户详细信息
  2. 然后更新用户类值,如姓名,电话号码
  3. 使用gson.toJson()
  4. 将其转换为String表示形式

    这次它给了我内存错误。 User Class还与ImageDetails和LocationDetails实体类有关系。

    错误:"背景粘性并发标记扫描"

2 个答案:

答案 0 :(得分:0)

以下是我解决问题的方法

  1. 在build.gradle(项目)中添加以下行 -

    classpath“io.realm:realm-gradle-plugin:1.1.0”

  2. 在build.gradle(app)中添加以下行 -

    申请插件:'realm-android'

  3. 以上两行将在您的项目中包含最新版本的Realm。

    1. 使用以下代码将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()));
      
    2. 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;
        }}
        

答案 1 :(得分:0)

另一个解决方案是拥有一个 RawUser 类,它不会扩展RealmObject并在这个新类上使用 Gson.toJson 。 您可以在Realm User类中添加 getRawUser 方法,然后只需编写

gson.toJson(user.getRawUser());

获取序列化对象