安卓数据库框架——Realm进阶学习
参考:
https://realm.io/cn/docs/java/latest/#realms
http://ngudream.com/2016/08/13/realm-builder/
Real的配置
基础配置
一般我们不配置migration和modules。
存储
Realm一般是建立一个数据库,如果仅仅希望存到内存,也是可以用的:
在realm完全关闭的时候会被释放。
Realm线程及监听
Realm可以实现不同线程中读取和写入 Realm 对象,即线程安全。同时,在Realm中的数据改变时,可以进行监听:
Realm监听:
在 Realm 数据改变的时候会被触发。
集合监听:
当集合中的某对象的属性改变时被触发,当然这个属性的改变需能保证该元素仍然满足查询条件从而使其仍然存在于集合当中。
对象监听:
为某个 Realm 对象注册监听器以获得针对对象属性修改的细粒度通知:
Json转换
可以直接将json对象转换成Realm对象并存储:
databaseHelper的封装:
public class GoodsDBHelper
{
private static volatile GoodsDBHelper
mInstance;
private final RealmConfiguration mDefaultConfig;
private ArrayList<RealmConfiguration>
mConfigsList =
new ArrayList<>();
private GoodsDBHelper(){
super();
mDefaultConfig =
new RealmConfiguration.Builder()
.name("PDA_Goods.realm")
//文件名
.schemaVersion(0)
//版本号
.build();
}
public static GoodsDBHelper
getInstance(){
if(mInstance
== null){
synchronized (GoodsDBHelper.class){
if(mInstance
== null){
mInstance =
new GoodsDBHelper();
}
}
}
return mInstance;
}
private Realm
createRealm() {
return createRealmByConfig(mDefaultConfig);
}
private Realm
createRealmByConfig(RealmConfiguration
config){
mConfigsList.add(config);
return Realm.getInstance(config);
}
/**
* 添加物资基本信息
* @param info
*/
public void insertGoodsInfo(GoodsInfo
info){
Realm realm
= createRealm();
realm.beginTransaction();
realm.copyToRealmOrUpdate(info);
realm.commitTransaction();
realm.close();
}
/**
* 查询指定物资
* @param goodsID
* @return
*/
@Nullable
public GoodsInfo
queryGoodsInfo(String
goodsID){
Realm realm
= createRealm();
GoodsInfo info
= realm.where(GoodsInfo.class).equalTo("userId",
goodsID).findFirst();
GoodsInfo result
= null;
if(info
!= null) {
result =
realm.copyFromRealm(info);
}
realm.close();
return result;
}
/**
* 查询全部用户
* @return
*/
public List<GoodsInfo>
queryGoodsInfos(){
Realm realm
= createRealm();
RealmResults<GoodsInfo>
realmResults =
realm.where(GoodsInfo.class).findAll();
List<GoodsInfo>
arrayList =
realm.copyFromRealm(realmResults);
realm.close();
return arrayList;
}
/**
* 删除指定用户
* @param userId
*/
public void deleteGoodsInfo(String
userId){
Realm realm
= createRealm();
GoodsInfo info
= realm.where(GoodsInfo.class).equalTo("userId",
userId).findFirst();
if(info
!= null) {
realm.beginTransaction();
info.deleteFromRealm();
realm.commitTransaction();
}
realm.close();
}
/**
* 删除全部用户信息
*/
public void deleteAllGoodsInfo(){
Realm realm
= createRealm();
realm.beginTransaction();
realm.delete(GoodsInfo.class);
realm.commitTransaction();
realm.close();
}
}