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

时间:2010-07-17 20:17:32

标签: android sqlite

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

我意识到反对单身人士的原因有很多,但对于这种情况,我想使用它。

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

MyAppData需要访问SQLite数据库。

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

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

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

我想知道我是否扩展了ContextWrapper会不会出现我所遗漏的代码中的某些内容,这会导致很大的问题(内存泄漏等)。

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

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

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

2 个答案:

答案 0 :(得分: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();
    }
}

然后有帮助DAO类来执行instertions / updates / etc 这就是我在所有应用程序中使用的内容。

答案 1 :(得分:0)

我使用过这种方法:

创建一个负责管理数据库的类,我们称之为DBUtil。该课程将扩展android.database.sqlite.SQLiteOpenHelper。您可以将对应用程序上下文的引用传递给此类的构造函数。该类将包含用于创建数据库,添加,删除和检索项的方法。

创建另一个类,我们称之为AppCore,创建DBUtil的静态实例和接受init()对象的静态ApplicationContext方法

public class AppCore
{
    public static var dbUtil:DBUtil;

    public static void init( ApplicationContext context )
    {
         dbUtil = new DBUtil( context );
    }
}

然后在我们的应用程序的主Activity的onCreate()方法中,初始化AppCore类。

@Override
protected void onCreate(Bundle savedInstanceState) 
{
     AppCore.init( getApplicationContext() );   
}

所以,它不是真正的单身人士。相反,DBUtil实例作为静态属性进行维护,但仍可在整个应用程序中访问,例如:

AppCore.dbUtil.createNewRecord( params );

此外,我发现本教程在开始使用此主题时非常有用:http://developer.android.com/guide/tutorials/notepad/index.html