如何在应用程序中使用getSharedPreferences?

时间:2017-04-07 08:52:19

标签: android android-sharedpreferences

我尝试在应用程序中调用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

7 个答案:

答案 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相关的任何其他操作。因为它需要ContextApplication的{​​{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;
    }
}

这是首选项的单例实现。