美文网首页
Realm在Android上的简单使用和一些问题

Realm在Android上的简单使用和一些问题

作者: zjman | 来源:发表于2019-12-26 17:15 被阅读0次

1. 使用前的build.gradle配置

1.1) 项目根目录下的build.gradle,在dependencies中添加

 classpath "io.realm:realm-gradle-plugin:3.0.+"
// 如果和gradle版本不匹配报错的 请自行更改

1.2) 在主Module的build.gradle文件中添加

  apply plugin: 'realm-android'
  realm {
          syncEnabled = true;
      }

2. 代码中常规使用

2.1) 初始化

// 在Application 的onCreate() 中或者在需要的serve中
   Realm.init(this);
          RealmConfiguration   config = new  RealmConfiguration.Builder()
                    .name("myRealm.realm")
                    .schemaVersion(1)
                    .build();
            Realm.setDefaultConfiguration(config);

2.2) 查询

             Realm realm=Realm.getInstance(config);
            // 查询所有
             RealmResults<FailFileInfo> data = realm.where(FailFileInfo.class).findAll();
           //根据条件查询
          FailFileInfo failFileInfo = realm.where(FailFileInfo.class).equalTo("fid",   fid).findFirst();

            realm.close();

2.3) 增加

            Realm realm = Realm.getInstance(config);
            realm.executeTransaction(new Realm.Transaction() {
                                          @Override
                                          public void execute(Realm realm) {
                                            FailFileInfo failFileInfo = new FailFileInfo();
                                            failFileInfo.setFid(fid);
                                            failFileInfo.setDevid(devid);
                                            realm.copyToRealm(failFileInfo);
                                          }

            });
            realm.close();

2.4) 删除

             Realm realm = Realm.getInstance(config);
            FailFileInfo failFileInfo = realm.where(FailFileInfo.class).equalTo("fid", fid).findFirst();
            realm.beginTransaction();
            if (failFileInfo!= null) {
                Log.e(TAG, failFileInfo.toString());
                failFileInfo.deleteFromRealm();
            }
            realm.commitTransaction();
            realm.close();

3. 总结下遇到的问题

主要是多线程的问题,在不同线程间根据 Realm.getInstance(config); 获取到realm, 可能这个线程在增加,那个线程在查询,数据不同步。以前认为只需要在 onDestroy()中 close()掉,后来多次尝试发现 每次获取realm 操作完后 realm.close(); 在新的线程 新获取的realm得到的数据就是最新的啦。

相关文章

网友评论

      本文标题:Realm在Android上的简单使用和一些问题

      本文链接:https://www.haomeiwen.com/subject/fqhloctx.html