【发布时间】:2016-05-25 17:08:46
【问题描述】:
我已经填写了领域数据库。一切正常。
应用程序有一个按钮,按下它会启动 IntentService。测试很简单
代码在这里
public class HNotificationService extends IntentService {
public HNotificationService() {
super("HNotificationService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("HNotificationService", "onHandleIntent");
Realm realm = Realm.getDefaultInstance();
RealmResults<HPartner> mResPartner = realm.where(HPartner.class).findAll();
final HPartner hPartner = mResPartner.get(0);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
hPartner.setName("test");
}
});
realm.close();
}
}
这段代码执行后,数据库变空了!我在日志中看不到任何错误。
注意。仅当我想记录某些内容时才会清理数据库。 我会很高兴得到任何帮助
EDIT1
内部应用程序类。我用这个代码
RealmConfiguration config = new RealmConfiguration.Builder(this).build();
Realm.setDefaultConfiguration(config);
EDIT2
是的,你是对的,数据库没有被删除!
Log.e("HNotificationService", "empty"); - 从不调用,很好
Realm realm = Realm.getDefaultInstance();
RealmResults<HPartner> mResPartner = realm.where(HPartner.class).findAll();
if (mResPartner.size() > 0) {
Log.e("HNotificationService", "don't empty!");
}
final HPartner hPartner = mResPartner.get(0);
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
hPartner.setName("test");
}
});
mResPartner = realm.where(HPartner.class).findAll();
if (mResPartner.size() == 0) {
Log.e("HNotificationService", "empty");
}
realm.removeAllChangeListeners();
realm.close();
另一个原因。当我转到另一个屏幕时,我正在调用代码
mResPartners = Realm.getDefaultInstance().where(HPartner.class).findAllAsync();
mResPartners.removeChangeListeners();
mResPartners.addChangeListener(mPartnersListener);
并且永远不会调用 mPartnersListener。这很奇怪。 如果不运行 IntentService。 mPartnersListener 总是被调用
编辑 3
mPartnersListener = new RealmChangeListener<RealmResults<HPartner>>() {
@Override
public void onChange(RealmResults<HPartner> realmResult) {
mResPartners.removeChangeListeners();
mClusterManager.clearItems();
mGoogleMap.clear();
if (realmResult != null && realmResult.size() > 0) {
mListPartners = realmResult;
getLoaderManager().restartLoader(LMarkerIcons.ID_LOADER, null, FrAroundMeMap.this);
}
}
};
【问题讨论】:
-
这看起来很正常。你的领域配置是什么?
-
执行该代码后如何检测 Realm 为空?
-
您确定您首先将 HPartner 添加到 DB 吗? realm.executeTransaction 保留机制以捕获 Exeption(如果发生)并取消事务。要找出问题,你可以使用登录。检查 HPartner 表的大小等,记录每一步。你怎么知道你的数据库变空了?
-
@Christian Melchior 请参阅edit2
-
@Vladymyr R.tmnko 请参阅edit2
标签: android realm intentservice