Как мне хранить данные для виджета? - PullRequest
4 голосов
/ 29 апреля 2011

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

Ответы [ 2 ]

3 голосов
/ 29 апреля 2011

Вам не нужно Activity для хранения настроек, просто Context.В вашем классе, который расширяет AppWidgetProvider, вы должны получить контекст во всех соответствующих методах, таких как onUpdate и onDeleted.

Затем вы можете использовать PreferenceManager, чтобы получить объект предпочтения и сохранить то, чтовам нужно в нем, например, это:

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
    int[] appWidgetIds)
{
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    String value = prefs.getString("key-string", null);
    if(value != null)
    {
        // do stuff
    }
}

В качестве примечания вы упомянули, что рассматривали возможность использования файлов, но не хотели по соображениям производительности.SharedPreferences объекты на самом деле заканчиваются использованием простых файлов, они просто управляются для вас Android.Если вы собираетесь получать к нему доступ часто, вам все равно нужно быть осторожным с производительностью.То же самое относится и к базам данных SQLite, так как это всего лишь файлы.

0 голосов
/ 24 сентября 2013

Эти обычные методы Widget содержат контекст true, но что если эти контексты изменятся?Например, одно приложение вызывает действие, которое прослушивает виджет с помощью onReceive и сохраняет данные в этом контексте, сможет ли его прочитать с помощью другого действия приложения?- другой контекст.

Что если он переопределит Приложение и получит его?- с активностью работает, не уверен насчет виджета!

...