Câu trả lời:
Để xóa các giá trị cụ thể: SharedPreferences.Editor.remove () theo sau là mộtcommit()
Để loại bỏ tất cả SharedPreferences.Editor.clear()
theo sau bởi mộtcommit()
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ế.
Giải pháp của tôi:
SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();
"text"
.
Xóa tất cả các ưu tiên:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
Xóa tùy chọn duy nhất:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();
KeyName
?
Nếu không cần phải xóa mỗi lần, bạn có thể xóa thủ công khỏi:
Cài đặt -> Ứng dụng -> Quản lý ứng dụng -> (chọn ứng dụng của bạn) -> Xóa dữ liệu hoặc Gỡ cài đặt
Các phiên bản Android mới hơn:
Cài đặt -> Ứng dụng -> (chọn ứng dụng của bạn) -> Lưu trữ -> Xóa dữ liệu và Xóa bộ nhớ cache
Xóa tùy chọn chia sẻ Android trong một dòng :-)
context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();
Hoặc apply
cho hoạt động không đồng bộ không chặn:
this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();
Có vẻ như tất cả các giải pháp không hoàn toàn hoạt động hoặc đã chết
để xóa tất cả SharedPreferences trong một Hoạt động
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();
Gọi đây từ Hoạt động chính sau onCreate
lưu ý * tôi đã sử dụng .apply()
thay vì .commit()
, bạn có thể tự do chọn commit ();
Bạn có thể sử dụng shell adb để làm điều này ngay cả khi không có điện thoại đã root. Điều hấp dẫn duy nhất là ứng dụng phải được gỡ lỗi.
run-as <your package name> <command>
Ví dụ:
run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db
Ngoài ra, bạn chỉ có thể thực hiện các thao tác trên nhưng không có lệnh sẽ đưa bạn đến thư mục gốc của gói ứng dụng và cho phép bạn thực thi nhiều lệnh hơn trong ngữ cảnh của ứng dụng.
run-as
. Bạn sẽ nghĩ rằng tôi đã tìm thấy thứ này sau 3 năm ...
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
Kể từ API 24 (Nougat), bạn có thể thực hiện:
context.deleteSharedPreferences("YOUR_PREFS");
Tuy nhiên, không có khả năng tương thích ngược, vì vậy nếu bạn hỗ trợ bất cứ điều gì dưới 24, hãy kiên trì:
context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply();
Xóa tất cả:
PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()
Bạn cũng có thể tự gỡ cài đặt ứng dụng bằng thiết bị của mình. Sau đó, khi bạn cài đặt lại ứng dụng của mình, các tùy chọn chia sẻ đã được đặt lại.
Trong các định nghĩa lớp:
private static final String PREFERENCES = "shared_prefs";
private static final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);
Bên trong lớp học:
public static void deleteAllSharedPrefs(){
sharedPreferences.edit().clear().commit();
}
Hãy thử mã này:
SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();
SharedPreferences.Editor xóa (Khóa chuỗi) theo sau là một cam kết () hoặc áp dụng ()
Để xóa tất cả các giá trị,
SharedPreferences.Editor xóa () theo sau là một cam kết () hoặc áp dụng ()
Để xóa các cặp giá trị chính khỏi tùy chọn, bạn có thể dễ dàng thực hiện các thao tác sau
getActivity().getSharedPreference().editor().remove("key").apply();
Tôi cũng đã phát triển thư viện để dễ dàng thao tác các sở thích được chia sẻ. Bạn có thể tìm thấy liên kết sau
Để xóa tất cả SharedPreferences tập trung khỏi mọi lớp:
public static SharedPreferences.Editor getEditor(Context context) {
return getPreferences(context).edit();
}
Và sau đó từ bất kỳ lớp nào: (cam kết trả về Boolean nơi bạn có thể kiểm tra xem Tùy chọn của mình có bị xóa hay không)
Navigation.getEditor(this).clear().commit();
Hoặc bạn có thể sử dụng áp dụng; nó trả về khoảng trống
Navigation.getEditor(this).clear().apply();
new File(context.getFilesDir(), fileName).delete();
Tôi có thể xóa tệp trong tùy chọn chia sẻ với nó
Không có câu trả lời nào phù hợp với tôi vì tôi có nhiều khóa tùy chọn chia sẻ.
Giả sử bạn đang chạy Thử nghiệm Android thay vì thử nghiệm đơn vị.
Nó đang làm việc cho tôi vòng lặp và xóa thông qua tất cả các tệp shared_prefs .
@B BeforeClass sẽ chạy trước tất cả các bài kiểm tra và ActivityTestRule
@BeforeClass
public static void setUp() {
Context context = InstrumentationRegistry.getTargetContext();
File root = context.getFilesDir().getParentFile();
String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list();
for (String fileName : sharedPreferencesFileNames) {
context.getSharedPreferences(fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit();
}
}
Cách ktx của Kotlin để xóa tất cả các tùy chọn:
val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
clear()
}
Bấm vào đây để tất cả các hoạt động tùy chọn được chia sẻ với các ví dụ
Bạn có thể sử dụng preferences.edit().remove("key").commit()
để xóa các giá trị đã lưu khỏi tùy chọn chia sẻ.
Mới làm sáng nay. Từ một dấu nhắc lệnh:
adb shell
cd /data/data/YOUR_PACKAGE_NAME/shared_prefs
rm * // to remove all shared preference files
rm YOUR_PREFS_NAME.xml // to remove a specific shared preference file
GHI CHÚ : Điều này yêu cầu một thiết bị đã root, chẳng hạn như các thiết bị ảo Android gốc, thiết bị Genymotion hoặc thiết bị cầm tay / máy tính bảng gốc thực sự, v.v.
/data/data
trực tiếp!
su
sau adb shell
để mở shell đặc quyền.