getSharedPreferences() cần một ngữ cảnh để truy cập.
Ví dụ:
mContext.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
Bạn cần phải hoặc vượt qua bối cảnh vào constructor cho KeyValueDB, hay một cách tốt hơn sẽ được truy cập mà tĩnh.
tôi sẽ làm điều này
public class KeyValueDB {
private SharedPreferences sharedPreferences;
private static String PREF_NAME = "prefs";
public KeyValueDB() {
// Blank
}
private static SharedPreferences getPrefs(Context context) {
return context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
}
public static String getUsername(Context context) {
return getPrefs(context).getString("username_key", "default_username");
}
public static void setUsername(Context context, String input) {
SharedPreferences.Editor editor = getPrefs(context).edit();
editor.putString("username_key", input);
editor.commit();
}
}
Chỉ cần lặp lại những get và set phương pháp đối với bất kỳ thông tin mà bạn cần lưu trữ.
Để truy cập chúng từ một hoạt động, bạn sẽ làm điều này:
String username = KeyValueDB.getUsername(this);
đâu "này" là một tham chiếu đến các hoạt động. Nó cũng thực hành tốt để thiết lập một bối cảnh trong từng hoạt động trong phương pháp onCreate(), như:
public class myActivity extends Activity{
Context mContext;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;
String username = KeyValueDB.getUsername(mContext);
}
EDIT tháng 7 năm 2016
để đáp ứng với @RishirajPurohit dưới đây, để đặt tên người dùng bạn làm rất nhiều điều tương tự:
KeyValueDB.setUsername(mContext, "DesiredUsername");
Từ đó tất cả mọi thứ được thực hiện cho bạn trong lớp tĩnh trước, sự thay đổi cam kết các ưu đãi file chia sẻ và vẫn kiên trì và sẵn sàng để được lấy ra bằng phương pháp get.
Chỉ cần một lưu ý về phương thức get, trong trường hợp ai thắc mắc:
public static String getUsername(Context context) {
return getPrefs(context).getString("username_key", "default_username");
}
"default_username" là chính xác như nó có vẻ. Nếu phương thức nhận được đó được gọi trước trước khi tên người dùng được đặt, đó là giá trị được trả về. Ít hữu ích hơn trong trường hợp này, nhưng khi bạn bắt đầu sử dụng các giá trị Số nguyên và Boolean, điều này rất hữu ích để đảm bảo tính chắc chắn.
Bạn cần đối tượng Context cho phiên bản SharedPreferences: http://developer.android.com/reference/android/content/Context.html#getSharedPreferences%28java.lang.String,%20int%29 – Benjamin