Как сделать Android-синглтон и пользовательский класс данных с базой данных? - PullRequest
2 голосов
/ 18 июля 2010

Я хочу использовать одноэлементный шаблон для хранения базы данных и некоторых других данных / методов для моего приложения для Android.

Я понимаю, что существует много причин, по которым я не использую синглтоны, но для этого случая я хотел бы использоватьit.

Я подклассифицировал UIApplication и создал в нем класс данных с именем MyAppData.

MyAppData должен иметь доступ к базе данных SQLite.

При созданиибаза данных, мне нужно передать контекст.Я мог бы передать контекст приложения, но он не будет напрямую связан с MyAppData.

Я не знаю, вызывает ли это wlll проблемы с моим кодом.

Так что я думаю, что MyAppdata расширяетandroid.content.ContextWrapper.Я не думаю, что мне следует расширять Activity, потому что это на самом деле не деятельность, а класс данных с методами для доступа к базе данных.

Мне интересно, если я расширю ContextWrapper, будет ли что-то глубокое в коде, который яя пропускаю, что вызовет большие проблемы в будущем (утечки памяти и т. д.).

Возможно, это не идеальный подход к этому (и я рассмотрел другие варианты), но моя цель заключается в следующем:

Имеет одноэлементный класс в UIApplication, который может инкапсулировать базу данных и быть легко извлеченным из любого действия в моем приложении.

Заранее спасибо за ваши предложения / предупреждения / советы.

Ответы [ 2 ]

6 голосов
/ 18 июля 2010

Подкласс 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, которые будут выполнять инструкции / обновления / и т. Д.
Это то, что я использую во всех своих приложениях.

0 голосов
/ 18 июля 2010

Я использовал этот подход:

Создайте класс, отвечающий за управление БД, назовем его 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 );
    }
}

Затем в методе onCreate () основного Activity нашего приложения инициализируйте класс AppCore.

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

Так, на самом деле это не синглтон. Вместо этого экземпляр DBUtil поддерживается как статическое свойство, но все еще доступен во всем приложении, например:

AppCore.dbUtil.createNewRecord( params );

Кроме того, я нашел этот учебник очень полезным при начале работы с этой темой: http://developer.android.com/guide/tutorials/notepad/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...