SharedPreferences strage。 getSharedPreferences不起作用

时间:2012-03-21 22:49:15

标签: android sharedpreferences

请帮帮我。我不知道这段代码有什么问题:

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");
}
}

在“静态SharedPreferences ...”行中,我收到错误:

方法getSharedPreferences(String,int)未定义类型WeatherWidget

为什么它的类方法是未定义的方法?

4 个答案:

答案 0 :(得分:4)

getSharedPreferences方法不适用于AppWidgetProvider,因为它不是上下文。此链接解释了一点:Get preferences in AppWidget Provider

答案 1 :(得分:4)

您需要一个Context对象来获取共享首选项引用:

// add to WeatherWidget:
@Override
public void onEnabled(Context ctx)
{
    settings = ctx.getSharedPreferences("weather_prefs", 0);
}

答案 2 :(得分:2)

将上下文作为参数从活动类发送到非活动类

在您的Activity类中:

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

在您的非活动类中:(不存在上下文)

public void fun_name(Context ctx)
{
    settings = ctx.getSharedPreferences("pref", 0);
}

答案 3 :(得分:0)

我使用此代码在AppWidgetProvider中获取共享首选项对象:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
        if (prefs == null)
            throw new NullPointerException("prefs");
prefs.getInt(....);