2012-05-28 4 views
46

Mã của tôi là:getDefaultSharedPreferences Android

final String eulaKey = "mykey"; 
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
boolean hasBeenShown = prefs.getBoolean(eulaKey, false); 

Luôn luôn trả về giá trị khác nhau tùy thuộc vào phiên bản os. Thử nghiệm trong 2.2, 2.3.4, 3.2, 4.0.3 - trả về giá trị chính xác. Nhưng đối với thiết bị Zte blade với 2.3.7 với CianogenMod 7.1 - kết quả luôn là sai. Tôi giả sử giá trị mặc định cho getBoolean.

Đây là mã viết boolean:

final String eulaKey = "mykey"; 
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
SharedPreferences.Editor editor = prefs.edit(); 
editor.putBoolean(eulaKey, true); 
editor.commit(); 

Có ai có bất cứ ý tưởng?

Cập nhật: So sánh mã hiện tại của tôi với phiên bản mã trước của tôi - không có sự khác biệt về mã. Chỉ có sự khác biệt là trong tệp kê khai: mã hoạt động Ok với minVersion = 8 và targetVersion = 8 Bây giờ tôi đang biên dịch với minversion = 8 và target = 13/vì Admob /. Có thể một số API đã thay đổi, nhưng tôi không tìm thấy gì về điều này.

GIẢI PHÁP: -Bắt đầu ứng dụng từ trình đơn tắt và từ cho tôi các DefaultSharedPreferences khác nhau. Sau khi xóa DefaultSharedPreferences khỏi mã của tôi - nó hoạt động hoàn hảo. Tôi không thể chỉ nói: mọi người không tạo lối tắt, vì vậy tôi phải thay đổi mã.

+1

Nó không phải không nghe cho một số thiết bị để mất một cách ngẫu nhiên dữ liệu SharedPreferences. Xem http://code.google.com/p/android/issues/detail?id=14359 để biết ví dụ. –

+0

Thông tin này chỉ liên quan đến getDefaultSharedPreferences? Bạn có biết các vấn đề tương tự về getSharedPreferences ("myAppPrefs", Context.MODE_PRIVATE); ? – Kostadin

+0

thử với getSharedPreferences so với mặc định. Nó hoạt động tốt – png

Trả lời

50

Hãy thử nó theo cách này:

final String eulaKey = "mykey"; 
Context mContext = getApplicationContext(); 
mPrefs = mContext.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE); 
SharedPreferences.Editor editor = mPrefs.edit(); 
editor.putBoolean(eulaKey, true); 
editor.commit(); 

trong trường hợp này bạn có thể xác định sở thích của riêng bạn tên (myAppPrefs) nộp và có thể kiểm soát truy cập persmission với nó. chế độ hoạt động khác bao gồm:

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS
+3

Bắt đầu ứng dụng từ phím tắt và từ trình đơn cung cấp cho tôi các DefaultSharedPreferences khác nhau. Sau khi xóa DefaultSharedPreferences khỏi mã của tôi - nó hoạt động hoàn hảo. Tôi không thể chỉ nói: mọi người không tạo ra shrotcuts, vì vậy tôi phải thay đổi mã. – Kostadin