Android领域:在单身

时间:2017-01-31 19:36:48

标签: java android realm

我正在测试Realm的数据库存储。

我正在使用单例来获取和管理需要经常刷新的常见数据。但似乎在我的单例中获取的Realm defaultInstance与我在Activity中获取它的范围不同。因此,当我通过我的单例获取远程数据,然后保存到领域时,我无法从Activity中检索该数据(获取空结果集)。

我试图将我在Activity中定义的Realm实例传递给单例(并在那里关闭它),但我仍然无法通过Activity实例检索保存的结果。

我在我的Application类中设置默认配置,如果这有所不同。

任何帮助都将在清除它时受到赞赏。

**修改

这是一些更多的代码。我正在使用retrofit和gson,而我的相关服务是在Utility类中(可能导致问题)。

 private void fetchMyObjects(Context context) {

        // Fetch the myObjects
        UtilityServices utilityServices = new UtilityServices(context);
        utilityServices.getMyObjects(new UtilityServices.MyObjectsListener() {
            @Override
            public void gotMyObjects(final ArrayList<MyObject> myObjects, Exception e) {
                if(e == null) {
                    Realm realm = null;
                    try {
                        realm = Realm.getDefaultInstance();
                        realm.executeTransaction(new Realm.Transaction() {
                            @Override
                            public void execute(Realm realm) {
                                realm.delete(MyObject.class);
                                realm.copyToRealm(myObjects);
                                Log.v("qwer", "LocalDataFragment fetchMyObjects: " + realm.where(MyObject.class).findAll().size());
                            }
                        });
                    } finally {
                        if(realm != null) {
                            realm.close();
                        }
                    }
                } else {
                    // TODO: Handle a myObject error.
                    e.printStackTrace();
                }
            }
        });
    }

1 个答案:

答案 0 :(得分:1)

只有一种方法是在执行事务后,Realm事务的结果不可见,并且事务发生在不同的线程上。

在您的代码中似乎很可能就是这种情况,因为如果在{i}}线程上运行getMyObjects,您将获得UI线程异常的#34;无网络活动&#34 ;