我尝试在应用程序中调用getSharedPreferences
public class App extends Application{
public App() {
SharedPreferences prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
}
...但我得到了NullPointerException
:
java.lang.NullPointerException: Attempt to invoke virtual method
'android.content.SharedPreferences
android.content.Context.getSharedPreferences(java.lang.String, int)'
on a null object reference
我也试过这个并得到了同样的例外:
Context con = getApplicationContext();
如何拨打getSharedPreferences
?
答案 0 :(得分:10)
在您的应用中覆盖awk
onCreate()
并在那里做。不要忘记在@Override
public void onCreate() {
super.onCreate();
中声明您的Application
子类。 E.g。
AndroidManifest
答案 1 :(得分:1)
您正在获取空指针,因为您是从构造函数中调用它。此时尚未创建应用程序上下文。 尝试从Application类的onCreate()方法调用它。
答案 2 :(得分:1)
您无法在Application的构造函数中创建共享首选项对象,而是在应用程序类的onCreate方法中创建共享首选项对象。这是代码块
public class App extends Application{
public App() {
}
@Override
public void onCreate(){
SharedPreferences prefs = getApplicationContext().getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE);
}
}
答案 3 :(得分:0)
在onCreate()
方法中获取SharedPreferences对象,而不是在构造函数
答案 4 :(得分:0)
Application
是Android类,拥有自己的生命周期。您无法在那里发起或执行与SharedPreference
相关的任何其他操作。因为它需要Context
而Application
的{{1}}尚未使用自己的生命周期进行初始化。因此,最好以Context
方法启动任何内容。
还有一个建议是,让你的onCreate
班级单身。
答案 5 :(得分:0)
我认为至少你可以这样试试;
public class MyApplicationclass extends Application {
Context context;
public MyApplicationclass() {
}
public MyApplicationclass(Context context) {
this.context = context;
}
}
现在你有了背景; 因此,创建和使用共享偏好很容易
答案 6 :(得分:0)
public class Preferences {
private static Preferences preferences = null;
private SharedPreferences.Editor editor;
private String userName;
private String token;
private String password;
private Preferences(Context context) {
editor = getCurrent(context).edit();
}
public static synchronized Preferences getInstance(Context context) {
if (preferences == null) {
preferences = new Preferences(context);
}
return preferences;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getDefaults(String key, Context context) {
return getCurrent(context).getString(key, null);
}
public void store(String key, String value) {
editor.putString(key, value);
editor.apply();
}
public void remove(String key) {
editor.remove(key);
editor.apply();
}
private SharedPreferences getCurrent(Context context) {
return context.getSharedPreferences("app_preference_key"), Context.MODE_PRIVATE);
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
这是首选项的单例实现。