我有一种在Realm中编写数据的方法:
public void setChatsList(final ChatsModel chatsModel) {
Realm realm = null;
try {
realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
realm.copyToRealmOrUpdate(chatsModel);
}
});
} finally {
if (realm != null) {
realm.close();
}
}
}
我用这种方法从数据库中读取数据:
ChatsModel getAllChatsList() {
Realm realm = Realm.getDefaultInstance();
RealmResults<ChatsModel> chatsModelResult = realm.where(ChatsModel.class).findAll();
ChatsModel chatsModel = chatsModelResult.get(0);
return chatsModel;
}
当我使用copyToRealmOrUpdate()
方法写入数据库时,它不会保存。也就是说,当您在方法中获取数据时,getAllChatsList()
将返回0.
当我使用insertOrUpdate()
方法进行编写时,每次写入时,即使它们具有相同的数据,它也不会更新现有记录,而是将其写入前一个记录
为什么条目数增加。虽然是同一个对象。好吧,如果有一个列表,但我只有一个对象并获得最后一条记录,我这样做:
ChatsModel chatsModel = chatsModelResult.get(chatsModelResult.size() - 1);
为什么呢?我不能在不发送论证的情况下阅读 - chatsModelResult.size() - 1
?
问题:如何解决写作和阅读问题?
答案 0 :(得分:1)
ChatsModel getAllChatsList() {
Realm realm = Realm.getDefaultInstance(); // <-- realm instance never closed
RealmResults<ChatsModel> chatsModelResult = realm.where(ChatsModel.class).findAll();
ChatsModel chatsModel = chatsModelResult.get(0);
return chatsModel;
}
通过在非looper后台线程上打开未关闭的Realm实例,您的版本将保留在旧版本的Realm上,并且无法自行更新。
可能是正确的生命周期管理,或者调用realm.refresh()
。