我想使用单例模式为我的Android应用程序保存数据库和其他一些数据/方法。
我意识到反对单身人士的原因有很多,但对于这种情况,我想使用它。
我已经对UIApplication进行了细分,并在其中创建了一个名为MyAppData的数据类。
MyAppData需要访问SQLite数据库。
当我创建数据库时,我需要传递一个上下文。我可以传递应用程序上下文,但它不会直接与MyAppData相关。
我不知道这是否会导致我的代码出现问题。
所以我的想法是让MyAppdata扩展android.content.ContextWrapper。我认为我不应该扩展Activity,因为它实际上不是一个活动,它是一个带有访问数据库方法的数据类。
我想知道我是否扩展了ContextWrapper会不会出现我所遗漏的代码中的某些内容,这会导致很大的问题(内存泄漏等)。
这可能不是理想的做法(我考虑过其他选择),但我的目标是:
在UIApplication中有一个单例类,可以封装数据库,并可以从我的应用程序中的任何活动中轻松检索。
提前感谢您的建议/警告/建议。
答案 0 :(得分:6)
子类android.database.sqlite.SQLiteOpenHelper
和android.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