android开发分享通过静态方法访问SharedPreferences

我有一些信息存储为SharedPreferences。 我需要从外部访问活动的信息(来自域模型类)。 所以我在一个Activity中创build了一个静态方法,我只用它来获取共享首选项。

这给我一些问题,因为显然无法从静态方法调用方法“getSharedPreferences”。

这是eclipse给我的消息:

Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper 

我试图通过使用一个活动的实例来解决这个问题,就像这样:

 public static SharedPreferences getSharedPreferences () { Activity act = new Activity(); return act.getSharedPreferences("FILE", 0); } 

这段代码给出了一个空点exception。

有没有解决办法? 我想通过尝试这样做到Android的代码气味?

提前致谢。

    那是因为在这种情况下, act是你刚刚创造的一个对象。 你必须让Android为你做到这一点; getSharedPreferences()Context一种方法,( ActivityService和其他类从Context延伸)。 所以,你必须做出你的select:

    克里斯蒂安的答案是好的,但如果你想能够从任何地方访问你的共享喜好,正确的方法是:

    我有一个类似的问题,我只是通过将当前上下文传递给静态函数来解决它:

     public static void LoadData(Context context) { SharedPreferences SaveData = context.getSharedPreferences(FILENAME, MODE_PRIVATE); Variable = SaveData.getInt("Variable", 0); Variable1 = SaveData.getInt("Variable1", 0); Variable2 = SaveData.getInt("Variable2", 0); } 

    既然你是从一个活动之外调用,你需要保存上下文:

     public static Context context; 

    并且在OnCreate里面:

     context = this; 

    将上下文存储为静态variables可能会导致问题,因为当类被销毁时,静态variables也是如此。 当应用程序中断并且内存不足时,有时会发生这种情况。 即使在设置上下文的类被随机销毁时,只要确保在尝试使用它之前始终设置上下文。

    这是将您的共享首选项存储在静态字段中的更好select。

    例如

     public class UserInfo extends Application{ private String SAVED_USERID; private String SAVED_USERNAME; public UserInfo(Context context) { SharedPreferences prefs = context.getSharedPreferences(FILE, MODE_PRIVATE); SAVED_USERNAME = prefs.getString("UserName", null); SAVED_USERID = prefs.getString("UserID", null); } public String getSavedUserName() { return SAVED_USERNAME; } public String getSavedUserID() { return SAVED_USERID; } } 

    在你的活动中使用

      UserInfo user = new UserInfo(this.getApplicationContext()); String SAVED_USERNAME = user.getSavedUserName(); String SAVED_USERID = user.getSavedUserID(); 

    我有同样的需求 – 我的一些偏好需要经常访问,并有效地。 我也想象从SharedPreferences读写string比获取和设置一个静态variables稍微慢一点(但可能是一个微不足道的程度)。 我也只是习惯于使用静态字段,只在启动时检索首选项值,并将它们保存在closures状态。

    我不喜欢我的选项直接保持对SharedPreferences / contexts的静态引用,但到目前为止,这种解决方法已经足够了。

    我的解决scheme

    随时随地使用您的静态偏好!

     public static String getPreferenceValue(Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); String key = context.getString(R.string.pref_key); String defaultVal = context.getString(R.string.pref_default); return sharedPreferences.getString(key,defaulVal); } 

      以上就是android开发分享通过静态方法访问SharedPreferences相关内容,想了解更多android开发(异常处理)及android游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/addevelopment/520341.html

      (0)
      上一篇 2020年12月6日
      下一篇 2020年12月6日

      精彩推荐