SharedPreferences Strage.getSharedPreferences не работает - PullRequest
3 голосов
/ 22 марта 2012

Пожалуйста, помогите мне.Я не знаю, что не так с этим кодом:

import android.appwidget.AppWidgetProvider;
import android.content.SharedPreferences;

public class WeatherWidget extends AppWidgetProvider {

static SharedPreferences settings = getSharedPreferences("weather_prefs", 0);

public void onUpdate()
{
    settings.getString("location", "N/A");
}
}

В строке «static SharedPreferences ...» я получаю сообщение об ошибке:

Метод getSharedPreferences (String, int) не определендля типа WeatherWidget

Почему его неопределенный метод, если его метод класса?

Ответы [ 4 ]

4 голосов
/ 22 марта 2012

Вам нужен объект Context, чтобы получить ссылку на общие предпочтения:

// add to WeatherWidget:
@Override
public void onEnabled(Context ctx)
{
    settings = ctx.getSharedPreferences("weather_prefs", 0);
}
4 голосов
/ 22 марта 2012

Метод getSharedPreferences недоступен для AppWidgetProvider, поскольку он не является контекстом.Эта ссылка объясняет немного больше: Получить настройки в AppWidget Provider

2 голосов
/ 06 декабря 2013

Отправка контекста в качестве параметра из класса активности в класс неактивности

В вашем классе деятельности:

function_name( getApplicationContext() ); // calling
(or simply)
function_name( this ); // calling

В вашем классе Non Activity: (там, где нет контекста)

public void fun_name(Context ctx)
{
    settings = ctx.getSharedPreferences("pref", 0);
}
0 голосов
/ 01 июля 2015

Я использовал этот код для получения объекта общих настроек в AppWidgetProvider:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        if (prefs == null)
            throw new NullPointerException("prefs");
prefs.getInt(....);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...