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();
}
});