จะลบคู่คีย์ / ค่าบางคู่ออกจาก SharedPreferences ได้อย่างไร


คำตอบ:


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

นี่คือตัวแก้ไข sharedPreferences


11
เพิ่มเติมเล็กน้อยสำหรับคำตอบนี้ จากเอกสารของ Android: "หากคุณไม่สนใจเกี่ยวกับค่าที่ส่งคืนและคุณกำลังใช้สิ่งนี้จากเธรดหลักของแอปพลิเคชันของคุณให้ลองใช้ apply () แทน"
Sreedevi J

3
@silwar ทำไมคุณ reedited สมัคร () กลับไปที่การกระทำ ()? เมื่อทราบว่าเอกสารระบุว่าให้ใช้ apply () เว้นแต่เราต้องการทำงานกับค่าส่งคืนและคำถามหรือคำตอบไม่ตรงกับกรณีนั้น
Salim Mahboubi

13

สิ่งสำคัญคือต้องทราบว่าเว้นแต่คุณจะวางแผนที่จะทำบางสิ่งบางอย่างด้วยค่าส่งคืนของการเรียกคอมมิต () ไม่มีเหตุผลอย่างแน่นอนในการใช้การเรียกแบบซิงโครนัสคอมมิต () แทนการเรียกใช้แบบอะซิงโครนัส ()

โปรดทราบว่าหากคุณเรียกสิ่งนี้จากเธรดหลัก / UI UI จะถูกบล็อกจนกว่าการกระทำ () จะเสร็จสิ้น การดำเนินการนี้อาจใช้เวลาประมาณ 100ms ขึ้นไปเมื่อใช้กับประมาณ 5ms สำหรับการสมัคร อาจดูเหมือนไม่มาก แต่ถ้าทำอย่างต่อเนื่องตลอดทั้งแอปพลิเคชันก็จะเพิ่มขึ้นอย่างแน่นอน

ดังนั้นหากคุณไม่ได้วางแผนที่จะทำสิ่งนี้หวังว่าจะแยกเธรด:

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

คุณควรทำสิ่งนี้แทน:

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

ฉันมองหาคำอธิบายที่ดี (โลกแห่งความจริง) ว่าเมื่อใดควรใช้การกระทำ VS ใช้ สิ่งนี้ผลักดันประเด็นให้ชัดเจน
XMAN


9

ง่ายมาก:

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

นี่คือวิธีที่ฉันแก้ไขปัญหานี้

ก่อนอื่นฉันสร้างอินสแตนซ์ของ SharedPreference เป็น

SharedPreferences mobilePreference;

จากนั้นฉันใช้ sharedPreference นี้เป็น

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

ที่นี่ "in.bhartisoftwares.amit.allamitappsthree" คือชื่อแพ็กเกจของฉันและฉันกำลังใช้ Context.MODE_PRIVATE เนื่องจากฉันต้องการจัดการการกำหนดค่าตามความชอบที่ใช้ร่วมกันนี้สำหรับชื่อแพ็กเกจนี้เท่านั้น

จากนั้นฉันกำลังลบ sharedPreference ที่เลือก (คีย์ของ sharedPreference ของฉันคือ mobileString) ดังนี้:

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

ดูรหัสเต็มด้านล่าง:

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

1

ข้อมูล

เพียงแค่ตรวจสอบsharedprefชั้นเรียนก็ขยายออกไปMapนั่นเป็นเหตุผลว่าทำไมจึงมีremoveวิธีการ

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

นี่คือตัวแก้ไข sharedPreferences

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.