美文网首页
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