ฉันจะลบข้อมูล SharedPreferences สำหรับแอปพลิเคชันของฉันได้อย่างไร
ฉันกำลังสร้างแอปพลิเคชันที่ใช้บริการเว็บจำนวนมากเพื่อซิงค์ข้อมูล เพื่อการทดสอบฉันต้องล้างค่า SharedPreferences บางค่าเมื่อฉันรีสตาร์ทแอพ
ฉันจะลบข้อมูล SharedPreferences สำหรับแอปพลิเคชันของฉันได้อย่างไร
ฉันกำลังสร้างแอปพลิเคชันที่ใช้บริการเว็บจำนวนมากเพื่อซิงค์ข้อมูล เพื่อการทดสอบฉันต้องล้างค่า SharedPreferences บางค่าเมื่อฉันรีสตาร์ทแอพ
คำตอบ:
ในการลบค่าเฉพาะ: SharedPreferences.Editor.remove ()ตามด้วย acommit()
หากต้องการลบออกทั้งหมดSharedPreferences.Editor.clear()
ตามด้วยcommit()
หากคุณไม่สนใจเกี่ยวกับค่าส่งคืนและคุณใช้สิ่งนี้จากเธรดหลักของแอปพลิเคชันของคุณให้พิจารณาใช้apply()
แทน
ทางออกของฉัน:
SharedPreferences preferences = getSharedPreferences("Mypref", 0);
preferences.edit().remove("text").commit();
"text"
เท่านั้น
กำลังลบการตั้งค่าทั้งหมด:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().clear().commit();
การลบการตั้งค่าเดียว:
SharedPreferences settings = context.getSharedPreferences("PreferencesName", Context.MODE_PRIVATE);
settings.edit().remove("KeyName").commit();
KeyName
?
หากไม่จำเป็นต้องลบออกทุกครั้งคุณสามารถลบออกได้ด้วยตนเองจาก:
การตั้งค่า -> แอปพลิเคชัน -> จัดการแอปพลิเคชัน -> (เลือกแอปของคุณ) -> ล้างข้อมูลหรือถอนการติดตั้ง
Android เวอร์ชันใหม่กว่า:
การตั้งค่า -> แอปพลิเคชัน -> (เลือกแอปของคุณ) -> ที่เก็บข้อมูล -> ล้างข้อมูลและล้างแคช
การลบค่ากำหนดที่แชร์ของ Android ในหนึ่งบรรทัด :-)
context.getSharedPreferences("YOUR_PREFS", 0).edit().clear().commit();
หรือapply
สำหรับการดำเนินการแบบอะซิงโครนัสที่ไม่ปิดกั้น:
this.getSharedPreferences("YOUR_PREFS", 0).edit().clear().apply();
ดูเหมือนว่าการแก้ปัญหาทั้งหมดจะไม่ทำงานหรือสมบูรณ์
เพื่อล้าง SharedPreferences ทั้งหมดในกิจกรรม
PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit().clear().apply();
เรียกสิ่งนี้จากกิจกรรมหลักหลังจาก onCreate
หมายเหตุ * ฉันใช้.apply()
แทนคุณ.commit()
มีอิสระในการเลือกกระทำ ();
คุณสามารถใช้เชลล์ adb เพื่อทำสิ่งนี้แม้ไม่มีโทรศัพท์รูท สิ่งที่จับได้เพียงอย่างเดียวคือแอปต้องสามารถ debuggable
run-as <your package name> <command>
ตัวอย่างเช่น:
run-as com.asdf.blah rm /data/data/com.asdf.blah/databases/myDB.db
หรือคุณสามารถทำข้างต้น แต่ไม่มีคำสั่งที่จะนำคุณไปยังรูทแพ็กเกจแอปและอนุญาตให้คุณรันคำสั่งเพิ่มเติมในบริบทของแอป
run-as
สำหรับเคล็ดลับที่เป็นประโยชน์เกี่ยวกับ คุณคิดว่าฉันจะได้พบสิ่งนี้หลังจาก 3 ปี ...
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
ในฐานะของ API 24 (Nougat) คุณสามารถทำได้:
context.deleteSharedPreferences("YOUR_PREFS");
อย่างไรก็ตามไม่มีความเข้ากันได้ย้อนหลังดังนั้นหากคุณสนับสนุนอะไรที่น้อยกว่า 24 ให้ทำตาม:
context.getSharedPreferences("YOUR_PREFS", Context.MODE_PRIVATE).edit().clear().apply();
ล้างพวกเขาทั้งหมด:
PreferenceManager.getDefaultSharedPreferences(context).edit().clear().apply()
คุณสามารถถอนการติดตั้งแอพด้วยตนเองโดยใช้อุปกรณ์ของคุณ จากนั้นเมื่อคุณติดตั้งแอพของคุณใหม่การตั้งค่าที่แชร์ได้ถูกรีเซ็ต
ในคำจำกัดความของคลาส:
private static final String PREFERENCES = "shared_prefs";
private static final SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(PREFERENCES, MODE_PRIVATE);
ในชั้นเรียน:
public static void deleteAllSharedPrefs(){
sharedPreferences.edit().clear().commit();
}
ลองรหัสนี้:
SharedPreferences sharedPreferences = getSharedPreferences("fake", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = sharedPreferences.edit();
edit.clear().commit();
หากเป็นการทดสอบของคุณ คุณสามารถใช้คำสั่ง adb
adb shell pm clear <package name>
String prefTag = "someTag";
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext);
prefs.edit().remove(prefTag).commit();
การดำเนินการนี้จะลบการตั้งค่าการแชร์ที่บันทึกไว้ด้วยชื่อ "someTag"
SharedPreferences.Editor ลบ (คีย์สตริง)ตามด้วยการกระทำ () หรือใช้ ()
หากต้องการลบค่าทั้งหมด
SharedPreferences.Editor clear ()ตามด้วย commit () หรือ Apply ()
ในการลบคู่ค่าคีย์ออกจากการตั้งค่าคุณสามารถทำสิ่งต่อไปนี้ได้อย่างง่ายดาย
getActivity().getSharedPreference().editor().remove("key").apply();
ฉันได้พัฒนาห้องสมุดเพื่อการปรับแต่งค่าที่แชร์แบบง่าย ๆ คุณอาจพบลิงค์ต่อไปนี้
วิธีล้าง SharedPreferences ทั้งหมดจากส่วนกลางจากคลาสใดก็ได้:
public static SharedPreferences.Editor getEditor(Context context) {
return getPreferences(context).edit();
}
และจากคลาสใดก็ได้: (คอมมิทส่งคืนบูลีนที่คุณสามารถตรวจสอบว่าการตั้งค่าของคุณถูกลบหรือไม่)
Navigation.getEditor(this).clear().commit();
หรือคุณสามารถใช้นำไปใช้; มันกลับเป็นโมฆะ
Navigation.getEditor(this).clear().apply();
new File(context.getFilesDir(), fileName).delete();
ฉันสามารถลบไฟล์ในค่ากำหนดที่แชร์ได้
ไม่มีคำตอบใดที่เหมาะกับฉันตั้งแต่ฉันมีคีย์การตั้งค่าที่แบ่งปัน
สมมติว่าคุณกำลังใช้การทดสอบ Android แทนการทดสอบหน่วย
มันทำงานสำหรับฉันวนรอบและลบผ่านไฟล์shared_prefsทั้งหมด
@BeforeClass จะทำงานก่อนการทดสอบและ 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();
}
}
วิธีKotlin ktxเพื่อล้างค่ากำหนดทั้งหมด :
val prefs: SharedPreferences = getSharedPreferences("prefsName", Context.MODE_PRIVATE)
prefs.edit(commit = true) {
clear()
}
คลิกที่นี่สำหรับการดำเนินการกำหนดลักษณะที่ใช้ร่วมกันทั้งหมดพร้อมตัวอย่าง
คุณสามารถใช้preferences.edit().remove("key").commit()
เพื่อลบค่าที่บันทึกไว้จากการตั้งค่าที่ใช้ร่วมกัน
เพิ่งทำเมื่อเช้านี้ จากพรอมต์คำสั่ง:
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
หมายเหตุ : สิ่งนี้ต้องใช้อุปกรณ์ที่รูทเช่นอุปกรณ์เสมือน Android ของสต็อก, อุปกรณ์ Genymotion หรือโทรศัพท์ / แท็บเล็ตที่รูทจริงเป็นต้น
/data/data
โดยตรง!
su
หลังจากadb shell
เปิดเชลล์ที่มีสิทธิใช้งาน