我有一些信息存储为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
一种方法,( Activity
, Service
和其他类从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