最佳实践:在片段之间管理安卓数据库引用

3

如何处理在片段之间显示数据列表和不同的线程/类后台更新数据之间的引用关系。因此,我需要能够通过Observer-inf或类似的方法从片段外部强制更新。

目前,我正在使用虚拟工厂类来创建一个新的SqlLiteDatabase对象,基于我的默认设置。

public static SQLiteDatabase initFor(Context context) {
    db = context.openOrCreateDatabase(NAME, SQLiteDatabase.CREATE_IF_NECESSARY, null);
    db.setLocale(Locale.getDefault());
    db.setVersion(1);
    db.setLockingEnabled(true);
    return db; }

然后我从每个片段中调用它并设置适配器,数据插入线程也是如此。为了关闭数据库,我覆盖了活动的onDestroy()方法并调用:initFor(this).close();

这很丑陋,并且在方向更改时会失败。我正在考虑使用SQLiteOpenHelper,但我不知道它如何帮助我。


您还在寻找有关此问题的解决方案吗? - Fuzzical Logic
其实并不是,但最佳实践的解决方案总是受到赞赏的。无论如何,我最终让我的活动扩展了一个抽象类DatabaseActivity,该类处理对SqlLiteDatabase的引用。我更喜欢避免单例模式。 - tkhduracell
为了将来他人的清晰度,那么当你的片段改变时,你是否使用相同的查询和游标,还是也重新构建它们? - Fuzzical Logic
当片段数据发生更改时,它们通过观察者模式进行通知,然后重新查询数据库游标并使用新适配器更新视图。 - tkhduracell
我知道。 :) 我只是想问一下你在做什么,这样我就不会提供一个无用的答案(即不能解决这个问题)。 - Fuzzical Logic
1个回答

0

你应该在另一个线程(在Service中)访问你的数据库,然后让它与一个类通信(可以是你的帮助器),然后通过单例在继承Application的类中初始化的方式访问这个帮助器类。你可以通过调用任何一个片段来获取你的Application类

 ((YourApplication) context.getApplicationContext()).getGetDatabaseHelper();

这仍然是当前的解决方案,还是应该使用无界面片段? - tkhduracell
你也可以使用无界面片段。我现在建议您查看使用ContentProvider,它可以通过getActivity().getContentResolver()轻松访问。 - Blundell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接