如何使用数据库制作Android单例和自定义数据类?

jus*_*der 2 sqlite android

我想使用单例模式来保存我的Android应用程序的数据库和一些其他数据/方法.

我意识到有很多理由反对单身人士,但对于这种情况我想使用它.

我已经对UIApplication进行了细分,并在其中创建了一个名为MyAppData的数据类.

MyAppData需要访问SQLite数据库.

当我创建数据库时,我需要传递一个上下文.我可以传递应用程序上下文,但它不会直接与MyAppData相关.

我不知道这是否会导致我的代码出现问题.

所以我的想法是让MyAppdata扩展android.content.ContextWrapper.我认为我不应该扩展Activity,因为它实际上不是一个活动,它是一个带有访问数据库方法的数据类.

我想知道我是否扩展了ContextWrapper会不会在我遗漏的代码中有一些深层的东西会导致很大的问题(内存泄漏等).

这可能不是理想的方法(我考虑过其他方案),但我的目标是:

在UIApplication中有一个单例类,可以封装数据库,并可以从我的应用程序中的任何活动轻松检索.

提前感谢您的建议/警告/建议.

yan*_*nko 6

子类android.database.sqlite.SQLiteOpenHelperandroid.app.Application(后者正确声明AndroidManifest.xml).
现在,

public class MyApplication extends Application {

    private static SQLiteOpenHelper openHelper;

    @Override
    public void onCreate() {
        super.onCreate();
        openHelper = new DbManager(this);
        //
    }

    public static SQLiteDatabase getDB() {
        return openHelper.getWritableDatabase();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后有帮助DAO类,将执行instertions/updates/etc.
这就是我在所有应用中使用的内容.

  • 我意识到这是一个古老的答案,但如果你还记得; 你在哪里关闭从getDB()返回的SQLiteDatabase?每次使用后?或者有什么方法可以在应用程序终止时关闭它吗?我知道应用程序中有一个onTerminate方法,但显然它不是在生产设备上调用的. (3认同)