วิธีใดดีที่สุดในการตั้งค่า "แอปพลิเคชัน" ใน Android [ปิด]


108

ฉันต้องการจัดเก็บการตั้งค่าแอปพลิเคชันบางอย่าง (เช่น URL ของ API และการตั้งค่าบางอย่างสำหรับการทดสอบ) สำหรับแอปพลิเคชัน Android

ส่วนใหญ่ฉันทำงานเป็นนักพัฒนา. NETดังนั้นฉันจึงคุ้นเคยกับการใช้ไฟล์app.configเพื่อจุดประสงค์นี้ วิธีที่ดีใน Android คืออะไร?

คำตอบ:


149

แอพพลิเคชั่นจำนวนมากอาจมีวิธีการบันทึกการตั้งค่าของผู้ใช้ในการตั้งค่าของแอพพลิเคชั่นหรือกิจกรรมเฉพาะ เพื่อรองรับสิ่งนี้ Android มีชุด API ง่ายๆ

ค่ากำหนดมักจะเป็นคู่ค่าของชื่อ สามารถจัดเก็บเป็น“ Shared Preferences” สำหรับกิจกรรมต่างๆในแอปพลิเคชัน (โปรดทราบว่าขณะนี้ไม่สามารถแชร์ข้ามกระบวนการได้) หรืออาจเป็นสิ่งที่ต้องจัดเก็บเฉพาะสำหรับกิจกรรม

  1. การตั้งค่าที่ใช้ร่วมกัน: การกำหนดลักษณะที่ใช้ร่วมกันสามารถใช้โดยส่วนประกอบทั้งหมด (กิจกรรมบริการ ฯลฯ ) จากแอปพลิเคชัน

  2. การตั้งค่าการจัดการกิจกรรม: การตั้งค่าเหล่านี้สามารถใช้ได้กับในกิจกรรมเท่านั้นและไม่สามารถใช้กับส่วนประกอบอื่น ๆ ของแอปพลิเคชันได้

การตั้งค่าที่ใช้ร่วมกัน:

การกำหนดลักษณะที่ใช้ร่วมกันได้รับการจัดการโดยใช้getSharedPreferencesวิธีการของContextคลาส ค่ากำหนดจะถูกเก็บไว้ในไฟล์เริ่มต้น (1) หรือคุณสามารถระบุชื่อไฟล์ (2) เพื่อใช้อ้างอิงการกำหนดลักษณะ

(1) นี่คือวิธีรับอินสแตนซ์เมื่อคุณระบุชื่อไฟล์

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATEเป็นโหมดการทำงานสำหรับค่ากำหนด เป็นโหมดเริ่มต้นและหมายความว่าไฟล์ที่สร้างขึ้นจะเข้าถึงได้โดยเฉพาะแอปพลิเคชันการโทร อีกสองโหมดที่รองรับคือMODE_WORLD_READABLEและMODE_WORLD_WRITEABLE. ในMODE_WORLD_READABLEแอปพลิเคชันอื่นสามารถอ่านไฟล์ที่สร้างขึ้น แต่ไม่สามารถแก้ไขได้ ในกรณีของMODE_WORLD_WRITEABLEแอปพลิเคชันอื่น ๆ ยังมีสิทธิ์ในการเขียนสำหรับไฟล์ที่สร้างขึ้น

(2) วิธีที่แนะนำคือการใช้โหมดเริ่มต้นโดยไม่ต้องระบุชื่อไฟล์

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

สุดท้ายเมื่อคุณมีอินสแตนซ์ค่ากำหนดแล้วนี่คือวิธีที่คุณสามารถดึงค่าที่เก็บไว้จากค่ากำหนด:

 int storedPreference = preferences.getInt("storedInt", 0);

ในการจัดเก็บค่าในSharedPreference.Editorอ็อบเจ็กต์ไฟล์การกำหนดค่าตามความชอบจะต้องถูกใช้ Editorเป็นอินเทอร์เฟซที่ซ้อนกันของSharedPreferenceคลาส

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Editor ยังสนับสนุนวิธีการเช่นremove()และclear()เพื่อลบค่าการกำหนดลักษณะออกจากไฟล์

การตั้งค่ากิจกรรม:

การกำหนดลักษณะที่ใช้ร่วมกันสามารถใช้โดยส่วนประกอบของแอปพลิเคชันอื่น ๆ แต่ถ้าคุณไม่จำเป็นต้องแบ่งปันการตั้งค่ากับส่วนประกอบอื่น ๆ และต้องการมีกิจกรรมส่วนตัว คุณสามารถทำได้ด้วยความช่วยเหลือของgetPreferences()วิธีการของกิจกรรม getPreferenceวิธีการใช้getSharedPreferences()วิธีการที่มีชื่อของระดับกิจกรรมสำหรับชื่อไฟล์การตั้งค่าที่

ต่อไปนี้เป็นรหัสสำหรับรับค่ากำหนด

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

รหัสในการจัดเก็บค่าจะเหมือนกับในกรณีของการกำหนดลักษณะร่วมกัน

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

คุณยังสามารถใช้วิธีการอื่น ๆ เช่นการจัดเก็บสถานะกิจกรรมในฐานข้อมูล หมายเหตุ Android android.preferenceนอกจากนี้ยังมีแพคเกจที่เรียกว่า แพ็คเกจกำหนดคลาสเพื่อใช้งาน UI การกำหนดลักษณะแอปพลิเคชัน

หากต้องการดูตัวอย่างเพิ่มเติมให้ตรวจสอบโพสต์การจัดเก็บข้อมูลของ Android บนไซต์นักพัฒนา


1
ขอบคุณ. ดูเหมือนว่าสิ่งที่ฉันต้องทำคือใช้ไฟล์ XML สำหรับสิ่งที่ฉันต้องการ (หรือบางทีฉันอาจใช้ XML เป็นข้อมูลในการโหลดเบื้องต้น) แต่สิ่งที่ต้องการนั้นมีประโยชน์สำหรับส่วนอื่นในโครงการของฉัน
Tim Almond

1
คุณสามารถใช้ไฟล์ xml สำหรับ init คุณต้องโทรหาPreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Pentium10

3
คู่มือนี้อาจเป็นประโยชน์เช่นกัน: developer.android.com/guide/topics/ui/settings.html
Hung Tran

1
+1. เพียงเล็กน้อยที่ควรทราบ หลังจากตั้งค่าในpreferencesออบเจ็กต์แล้วeditor.apply()ขอแนะนำให้เรียกอีกครั้งeditor.commit()เนื่องจากอดีตจะจัดการการบันทึกในพื้นหลัง
Anindya Chatterjee

2
ฉันค่อนข้างสับสนที่นี่ sharedPreferences มีไว้สำหรับจัดเก็บการตั้งค่าผู้ใช้ผ่านแอพไม่ใช่การตั้งค่าแอพ ผู้ใช้ (และฉันด้วย) สงสัยว่าจะเก็บการตั้งค่าแอปไว้ที่ใด, ex API url หรือการตั้งค่าอื่น ๆ ที่แอปใช้ทำงานได้อย่างถูกต้อง
albanx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.