Хранить общий объект для всех действий - PullRequest
0 голосов
/ 05 июля 2011

У меня есть класс:

public class DbAdapter {
    private DbHelper dbHelper;
    private SQLiteDatabase db;
    private final Context context;
    ...
}

, и я хочу, чтобы он был доступен во всех видах деятельности.Класс предоставляет доступ к моей базе данных sqlite.

Какой самый элегантный и аккуратный способ сделать это?Я думал о создании объекта в каждом действии (это должно «соединить» меня с одной и той же базой данных, верно?).

Ответы [ 4 ]

2 голосов
/ 05 июля 2011

Вы можете добиться этого, расширяя класс Application. У Google есть это, чтобы сказать об этом:

Базовый класс для тех, кому нужно поддерживать глобальное состояние приложения. Вы может обеспечить вашу собственную реализацию указав его имя в вашем AndroidManifest.xml-х тег, который приведет к тому, что этот класс будет создан для вас, когда процесс для вашего приложения / пакета создано.

Обычно нет необходимости создавать подклассы Заявка. В большинстве случаев статический синглтоны могут обеспечить то же самое функциональность в более модульном виде. Если ваш синглтон нуждается в глобальном контекст (например, для регистрации приемники вещания), функция для получить его можно дать контекст который внутренне использует Context.getApplicationContext () когда Сначала строим синглтон.

Я сделал это сам так:

public class App extends Application {

    private DbHelper dbHelper;

    @Override
    public void onCreate() {
        super.onCreate(); 
        dbHelper = new DbHelper(this);

    }

    public SQLiteDatabase getDatabase(){
        return dbHelper.getWritableDatabase();
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        dbHelper.close();
    }   
}

Затем вы просто получаете к нему доступ, вызывая getApplicationContext.getDatabase ()

0 голосов
/ 05 июля 2011

Посмотрите на ContentProviders . Они созданы для доступа к данным. И несмотря на то, что в ссылке делается акцент на «обмен данными между приложениями», они не обязательно должны быть общедоступными - вы можете использовать их как централизованный способ доступа к данным в вашем приложении.

В этой записи блога ' Написание собственного ContentProvider ' показан код для настройки ContentProvider, который работает в одном приложении.

0 голосов
/ 05 июля 2011

Я думаю, что лучший способ реализовать это - использовать Сервис .Сервис будет содержать ссылку на DbAdapter, а все ваши действия будут подключаться к сервису .Когда активность связана со службой, она будет сохранять ссылку на нее, и каждый раз, когда ей понадобится доступ к базе данных, она будет использовать ее для получения DbAdapter.Используя этот подход, вы будете контролировать ваше соединение с БД.Если к сервису не подключены никакие действия, никто не использует соединение db, и вы можете его освободить.

0 голосов
/ 05 июля 2011

Вы можете взглянуть на Singleton Pattern , он дает возможность сделать в классе только один созданный объект и сделать этот объект доступным из любого места. Надеюсь, это поможет.

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