【问题标题】:SharedPreferences strage. getSharedPreferences not workingSharedPreferences 策略。 getSharedPreferences 不起作用
【发布时间】:2012-04-06 12:37:24
【问题描述】:

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

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 类型

如果是类方法,为什么是未定义的方法?

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您需要一个 Context 对象来获取共享偏好参考:

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

      【讨论】:

        【解决方案3】:

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

        在您的 Activity 类中:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2013-03-30
            • 2023-04-07
            • 2021-06-24
            • 1970-01-01
            • 2013-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多