Làm thế nào để lấy tất cả các khóa SharedPreferences
, không phải giá trị của tùy chọn chỉ khóa duy nhất?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Làm thế nào để lấy tất cả các khóa SharedPreferences
, không phải giá trị của tùy chọn chỉ khóa duy nhất?
prefA = getSharedPreferences("MyAttack", MODE_PRIVATE);
prefB= getSharedPreferences("MySkill", MODE_PRIVATE);
Câu trả lời:
SharedPreferences
có phương thức getAll()
trả về a Map<String, ?>
. Từ Bản đồ, bạn có thể dễ dàng truy xuất các khóa keySet()
và ánh xạ khóa / giá trị với entrySet()
:
Map<String, ?> allEntries = prefA.getAll();
for (Map.Entry<String, ?> entry : allEntries.entrySet()) {
Log.d("map values", entry.getKey() + ": " + entry.getValue().toString());
}
Những gì bạn có thể làm là sử dụng phương thức getAll () của SharedPreferences và lấy tất cả các giá trị trong Map và sau đó bạn có thể dễ dàng lặp lại chúng:
Map<String,?> keys = prefs.getAll();
for(Map.Entry<String,?> entry : keys.entrySet()){
Log.d("map values",entry.getKey() + ": " + entry.getValue().toString());
}
Để biết thêm, bạn có thể kiểm tra việc triển khai dump () của PrefUtil.java bằng liên kết này .
Sử dụng phương thức getAll () của android.content.SharedPreferences
.
Map<String, ?> map = sharedPreferences.getAll();
Kotlin sẽ cho phép bạn lấy tất cả các khóa SharedPreferences của mình chỉ bằng một dòng bằng cách sử dụng Bản đồ .
Chúc mừng bạn đời 🎉
val sharedPreferences = context.getSharedPreferences("SHARED_PREFERENCES", Context.MODE_PRIVATE)
val sharedPreferenceIds = sharedPreferences.all.map { it.key } //returns List<String>
Kiểm tra mã bên dưới để biết getAll()
phương pháp
Map<String, ?> prefsMap = prefA.getAll();
for (Map.Entry<String, ?> entry: prefsMap.entrySet()) {
Log.v("SharedPreferences", entry.getKey() + ":" +
entry.getValue().toString());
}
Sau khi đọc phản hồi @Delacrix và chơi với Kotlin-way (được thử nghiệm trong Kotlin 1.3.11) để lấy các khóa, tôi đã tìm ra một phiên bản thậm chí còn ngắn hơn để lấy các khóa (hoặc thậm chí các giá trị):
val prefsA = context.getSharedPreferences("MyAttack", Context.MODE_PRIVATE)
val prefsAIDs = sharedPreferences.all.keys //returns MutableSet<String>
Theo cách tương tự, bạn chỉ có thể truy cập các giá trị thông qua sharedPreferences.all.values
(ngay cả tho không phải là những gì bạn đã hỏi trong câu hỏi của mình, có thể hữu ích cho những người đọc khác).
Mặc dù câu trả lời của @ Blackbelt khá phổ biến ở đây, tôi nghĩ rằng nó không thực sự nhắm vào câu hỏi. (Không có gì đáng ngạc nhiên vì câu hỏi trộn lẫn thuật ngữ của tên và khóa tùy chọn.) Tôi đoán câu hỏi là làm thế nào để tìm ra phiên bản tùy chọn chia sẻ nào đã được tạo - điều này có thể được quan tâm nếu các tên được tạo động.
Đây là hai chiến lược cho điều đó:
tạo một phiên bản "meta" tùy chọn chia sẻ khác trong đó tất cả các phiên bản tiền chất được chia sẻ đã tạo đều được đăng ký bằng cách thêm một cặp khóa / giá trị cho nó vào meta pref - với khóa là tên tiền chất được chia sẻ và giá trị là bất kỳ giá trị nào, ví dụ true
.
getSharedPreferences( DYNAMIC_PREFS_NAME, 0 )
.edit().put*(*).apply();
getSharedPreferences( "meta_prefs_index", 0 )
.edit().putBoolean( DYNAMIC_PREFS_NAME, true).apply();
Để có được tất cả các tiền đề được chia sẻ do bạn tạo, hãy sử dụng các tiền đề meta và làm theo câu trả lời của @Blackbelt.
sở thích chia sẻ có một tệp sao lưu, được lưu trữ trong thư mục /data/data/YOUR_PACKAGE_NAME/shared_prefs
có tên YOUR_PREFS_NAME.xml
Vì vậy, bạn có thể xem trong thư mục đó để biết các tệp sở thích chia sẻ của mình. Nhưng hãy cẩn thận, có thể có các tệp tùy chọn chia sẻ không được tạo theo logic của bạn! Trước khi tôi gắn bó với cách tiếp cận đầu tiên.