статический getApplicationContext для SQLiteOpenHelper - PullRequest
0 голосов
/ 21 февраля 2012

недавно я пытался создать вызовы db в псевдо-AciveRecord-стиле в своем приложении для Android и предложил несколько методов класса, таких как User.all (Context dbContext), User.find (длинный идентификатор, Context dbContext) , User.delete (длинный идентификатор, контекст dbContext) и т. Д. Под псевдо-AciveRecord я подразумеваю, что я не планирую делать это «настоящей библиотекой ActiveRecord» или чем-то в этом роде. Я просто хочу, чтобы в моем коде было легко понять вызовы БД, и стиль ActiveRecord - лучший для меня лично. Пока все хорошо, и у меня нет проблем с этим кодом, например:

    public static Cursor allAsCursor(Context dbContext) {
    DBHelper dBHelper = new DBHelper(dbContext);
    SQLiteDatabase database = dBHelper.getReadableDatabase();

    Cursor dbQueryResult = database.query(DBHelper.TABLE_NAME_USERS, null, null, null, null, null, "_id DESC");
    dbQueryResult.getCount();

    database.close();
    dBHelper.close();
    dbContext = null;


    return dbQueryResult;
}

Но меня беспокоит то, что я передаю контекст активности или что-то в этом роде все время, когда я звоню, и мне было интересно, будет ли хорошей идеей просто дать свой класс User (который имеет User.find , User.all и т. Д.) Статическая переменная, где он будет хранить контекст приложения для каждого запроса БД? Это можно сделать во время обеда в приложении или до самого первого запроса.

Мое мышление исходит от iOS CoreData, где у вас есть довольно статический менеджер контекста для запросов, которые вы постоянно получаете из общего приложения.

Есть мысли, предложения, идеи?

Спасибо.

1 Ответ

0 голосов
/ 21 февраля 2012

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

Например:

private static Context context;

public static void setContext(Context context){
    YourDBHelperClass.context = context;
}

Теперь ваш метод может простоссылаться на этот контекст вместо того, чтобы передавать его каждый раз при совершении транзакции.

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

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