Làm cách nào để xóa một số cặp khóa / giá trị khỏi SharedPreferences?


90

Làm cách nào để xóa một số cặp khóa / giá trị khỏi SharedPreferences? Tôi đã đặt và tôi xóa nó khỏi prefs.

Câu trả lời:


218
SharedPreferences mySPrefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mySPrefs.edit();
editor.remove(key);
editor.apply();

Đây là trình chỉnh sửa sharedPreferences.


11
Một bổ sung nhỏ cho câu trả lời này. Từ tài liệu android: "Nếu bạn không quan tâm đến giá trị trả về và bạn đang sử dụng giá trị này từ luồng chính của ứng dụng, hãy xem xét sử dụng apply () thay thế."
Sreedevi J

3
@silwar, tại sao bạn lại chỉnh sửa apply () trở lại commit ()? biết rằng các tài liệu nói để sử dụng được áp dụng () trừ khi chúng tôi muốn làm việc với các giá trị trả về, và không phải câu hỏi hoặc câu trả lời phù hợp vào trường hợp đó
Salim Mahboubi

13

Điều quan trọng cần lưu ý là, trừ khi bạn đang lên kế hoạch thực hiện điều gì đó với giá trị trả về của lệnh gọi commit (), hoàn toàn không có lý do gì để sử dụng lệnh gọi commit () đồng bộ thay vì lệnh gọi apply () không đồng bộ.

Hãy nhớ rằng nếu bạn đang gọi điều này từ chuỗi chính / giao diện người dùng, giao diện người dùng sẽ bị chặn cho đến khi hoàn thành commit (). Quá trình này có thể mất khoảng 100ms so với khoảng 5ms đối với ứng dụng. Điều đó có vẻ không nhiều, nhưng nếu được thực hiện liên tục trong suốt một ứng dụng, nó chắc chắn sẽ tăng lên.

Vì vậy, trừ khi bạn đang lên kế hoạch làm điều gì đó như thế này, hãy hy vọng vào một chuỗi riêng:

editor.remove(String key); 
boolean success = editor.commit();
if (!success) { 
    // do something 
}

Thay vào đó, bạn nên làm điều này:

editor.remove(String key); 
editor.apply();

Tôi đã tìm kiếm một lời giải thích tốt (trong thế giới thực) về thời điểm sử dụng commit so với apply. Điều này thúc đẩy quan điểm rõ ràng.
XMAN

9
SharedPreferences.Editor.remove(key) 
commit();

1
Nếu bạn không sử dụng giá trị trả về từ phương thức remove và bạn đang sử dụng giá trị này từ chuỗi chính của ứng dụng, hãy xem xét sử dụng apply () thay thế.
kartik srivastava

9

Nó rất đơn giản:

private SharedPreferences sharedPreferences() {
    return PreferenceManager.getDefaultSharedPreferences(mContext);
}

public void clearSharedPreferences() {
    sharedPreferences()
            .edit()
            .remove(SOME_KEY_1)
            .remove(SOME_KEY_2)
            .remove(SOME_KEY_3)
            .apply();
}

3

Đây là cách tôi giải quyết vấn đề này.

Đầu tiên, tôi đã tạo một phiên bản của SharedPreference với tư cách là

SharedPreferences mobilePreference;

thì tôi đã sử dụng sharedPreference này với tư cách là

mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);

Ở đây "in.bhartisoftwares.amit.allamitappsthree" là tên gói của tôi và tôi đang sử dụng Context.MODE_PRIVATE, vì tôi chỉ muốn thao tác tùy chọn chia sẻ này cho tên gói này.

Sau đó, tôi xóa sharedPreference đã chọn (khóa sharedPreference của tôi là mobileString) như sau:

mobilePreference.edit().remove("mobileString").commit();

Xem mã đầy đủ dưới đây:

SharedPreferences mobilePreference = this.getSharedPreferences("in.bhartisoftwares.amit.allamitappsthree", Context.MODE_PRIVATE);
    mobilePreference.edit().remove("mobileString").commit();

1

Thông tin

Chỉ cần kiểm tra sharedpreflớp được mở rộng Map, đó là lý do tại sao có removephương thức

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.remove(String key);
editor.apply();

Đây là trình chỉnh sửa sharedPreferences.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.