代码之家  ›  专栏  ›  技术社区  ›  just_another_coder

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

  •  2
  • just_another_coder  · 技术社区  · 16 年前

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

    我知道有很多反对单例的理由,但是对于这个例子,我想使用它。

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

    MyAppData需要访问SQLite数据库。

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

    我不知道这是否会给我的代码带来问题。

    我想知道如果我扩展ContextWrapper,在代码的深处会不会有一些我遗漏的东西,这会导致大问题(内存泄漏等)。

    这可能不是实现这一点的理想方法(我也考虑过其他选择),但我的目标是:

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

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

    2 回复  |  直到 16 年前
        1
  •  6
  •   yanchenko    16 年前

    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类来执行insertions/updates/etc。

        2
  •  0
  •   JeremyFromEarth    16 年前

    我用过这种方法:

    DBUtil . 这门课将延长 android.database.sqlite.SQLiteOpenHelper . 可以将对应用程序上下文的引用传递给此类的构造函数。此类将包含用于创建数据库、添加、删除和检索项的方法。

    创建另一个类,我们称之为 AppCore ,创建 还有静电干扰 init() 接受 ApplicationContext 对象

    public class AppCore
    {
        public static var dbUtil:DBUtil;
    
        public static void init( ApplicationContext context )
        {
             dbUtil = new DBUtil( context );
        }
    }
    

    然后在应用程序的main Activity ,初始化 应用程序核心 班级。

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

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

    AppCore.dbUtil.createNewRecord( params );
    

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