领域数据库,我可以使用crud吗?

时间:2016-08-24 23:13:52

标签: android realm

我在GITHUB看到要问这里..

旧的SQLIte我曾经创建过一个用于进行数据库操作的CRUD服务..现在它有点不同,为什么?因为我应该记得打电话给realm.close();

我至少有4个活动,10个片段,10个异步任务和其他东西,每个人都有一种数据库操作,如果我需要调用realm.close

我应该创建一个CRUD,并传递realm并使用它来进行操作?

我的实际代码如下所示:

static LOperations instance;
private Realm realm;
private RealmQuery<L> query;
private RealmResults<Category> categories;
private L lObject;

public LOperations(Application application) {
    realm = Realm.getDefaultInstance();
}


public static LOperations with(Activity activity) {
    if (instance == null) {
        instance = new LOperations(activity.getApplication());
    }
    return instance;
}

public static LOperations with(Application application) {

    if (instance == null) {
        instance = new LOperations(application);
    }
    return instance;
}

public static LOperations with(Fragment fragment) {
    if (instance == null) {
        instance = new LOperations(fragment.getActivity().getApplication());
    }
    return instance;
}

@Override
public RealmResults<Lei> getAllLbyCategory(String c) {
    query = realm.where(L.class);
    query.equalTo("active", 1);
    query.contains("category", c);
    return  query.findAllSorted("id", Sort.ASCENDING);

}

@Override
public RealmResults<Category> getAllCategories() {
    return realm.where(Category.class).equalTo("active", true).findAllSorted("order", Sort.ASCENDING);
}

@Override
public RealmResults<Lei> getAllActiveL() {

    query = realm.where(L.class);
    query.equalTo("active", 1);
    return query.findAllSorted("last_date", Sort.ASCENDING);

}

这项工作非常完美,但我无法理解如何跟踪已打开的数据库?

实际上我使用它:LOperations.with(this/getActivity).someMethod();(通过这样做,我认为我无法跟踪打开的领域)

我可以考虑一下这个:

Realm realm = realm.getDefaultInstance();

and to get allActiveL(), change to:

  @Override
    public RealmResults<Lei> getAllActiveL(Realm realm) {

        realm.where(L.class);
        query.equalTo("active", 1);
        return query.findAllSorted("last_date", Sort.ASCENDING);

    }

所以我创建了领域然后将其传递给METHOD,所以我可以在onDestroy上添加realm.close()

是正确的做法吗?或者还有另一个吗?

1 个答案:

答案 0 :(得分:0)

目前,您的LOperations仅适用于您首次创建实例的线程,然后它不会在任何其他线程上工作(它很容易在{{1 }})

目前我的存储库都有一个doInBackground()参数,并且是单例。另一种可能的方法是在需要时创建一个存储库,并在创建时将实例传递给它(并且在执行线程时关闭实例)。

Realm

我个人使用single Realm for the UI thread,并为后台线程创建Realm实例,最后关闭。

但一般来说,public interface RealmRepository<T extends RealmObject, ID> { String getIdFieldName(); T findOne(Realm realm, ID id); RealmResults<T> findAll(Realm realm); T saveOrUpdate(Realm realm, T t); RealmList<T> saveOrUpdate(Realm realm, RealmList<T> tList); RealmQuery<T> query(Realm realm); void delete(Realm realm, ID id); void delete(Realm realm, T t); void deleteAll(Realm realm, RealmResults<T> realmResults); void deleteEveryObject(Realm realm); long count(Realm realm); } onCreate()适用于活动,onDestroy()onCreateView()适用于普通片段,我个人constructor and onDestroy() for retained fragments

对于异步任务,

onDestroyView()