Realm学习

本文介绍如何使用 Realm 数据库进行 Android 开发,包括初始化、增删改查等基本操作,并解决常见错误,如 ButterKnife 和 Realm 的冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


    Android数据库Realm学习(一)基本使用
    Realm for Android快速入门教程
    Realm Android简单使用说明
    realm官方文档

    http://www.jianshu.com/p/a506ee4afecb

    错误记录
    1. 同时引用ButterKnife和Realm编译时可能会出现下述错误:

    Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
    
    com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK META-INF/services/javax.annotation.processing.Processor
    File1: C:\Users\Администратор.gradle\caches\modules-2\files-2.1\com.jakewharton\butterknife\7.0.1\d5d13ea991eab0252e3710e5df3d6a9d4b21d461\butterknife-7.0.1.jar
    File2: C:\Users\Администратор.gradle\caches\modules-2\files-2.1\io.realm\realm-android\0.86.0\e49a43bcbbc3d5e5491dd2f4d3799a504b618e6b\realm-android-0.86.0.jar

    从stackoverflow看到解决方案,在gradle文件中做如下配置:

    packagingOptions {
    exclude 'META-INF/services/javax.annotation.processing.Processor' 
    }

    这里记录下,方便大家排查
    2.

    Gson gson = new GsonBuilder()  
      .setExclusionStrategies(new ExclusionStrategy() {  
        // This is required to make Gson work with RealmObjects  
        @Override public boolean shouldSkipField(FieldAttributes f) {  
          return f.getDeclaringClass().equals(RealmObject.class);  
        }  
    
        @Override public boolean shouldSkipClass(Class<?> clazz) {  
          return false;  
        }  
      }).create();  

    Realm创建
    1. 第一步realm每个activity使用都需要初始化,直接在application中初始化他

    public class MyApplication extends Application {
      @Override
      public void onCreate() {
        super.onCreate();
        // The realm file will be located in Context.getFilesDir() with name "default.realm"
        RealmConfiguration config = new RealmConfiguration.Builder(this).build();
        Realm.setDefaultConfiguration(config);
      }
    }
    
    public class MyActivity extends Activity {
      @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Realm realm = Realm.getDefaultInstance();
        // ... Do something ...
        realm.close();
      }
    }
        //添加一条数据到数据库  
            private void realmInsert(Realm realm) {  
                realm.beginTransaction();//必须先开启事务  
                Book book = realm.createObject(Book.class);  
                book.setAuthor("司马迁");  
                book.setName("史记");  
                realm.commitTransaction();//提交事务  
                book = realm.where(Book.class).findFirst();  
            }  
    //查询一个数据库中第一个book  
            Book book = realm.where(Book.class)  
                    .equalTo("name","史记")//相当于where name='史记'  
                    .or()//或,连接查询条件;没有这个方法时,默认是隐式地被逻辑和(&)组合  
                    .equalTo("author","司马迁")//相当于 author='司马迁'  
                    .findFirst();  
        private void realmUpdate(Realm realm){  
                realm.beginTransaction();//开启事务  
                Book b = new Book();//新建实例  
                b.setId(1);//book类新加的int属性,用@PrimaryKey注解作为主键  
                b.setAuthor("simaqian");  
                b.setName("史记");  
                realm.copyToRealmOrUpdate(b);//修改操作  
                realm.commitTransaction();//提交事务  
            }  
    realm.executeTransaction(new Realm.Transaction(){
                            @Override
                            public void execute(Realm realm) {
                                RealmResults<GankDataBean>results = realm.where(GankDataBean.class).equalTo("type", mType).findAll();
                                results.clear();
                            }
                        });
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值