सेव की गई प्राथमिकता वाली वैल्यू का इस्तेमाल करें Android Jetpack का हिस्सा है.
इस दस्तावेज़ में बताया गया है कि डेटा को सेव और इस्तेमाल कैसे करें
Preference
वैल्यू जिन्हें सेव किया गया है
प्राथमिकता लाइब्रेरी पर क्लिक करें.
पसंद के मुताबिक डेटा सेव करने की सुविधा
इस सेक्शन में बताया गया है कि Preference
, डेटा को कैसे सेव रख सकता है.
शेयर की गई प्राथमिकताएं
डिफ़ॉल्ट रूप से, Preference
सेव करने के लिए SharedPreferences
वैल्यू. SharedPreferences
एपीआई, आसानी से पढ़ने और लिखने की सुविधा देता है
सभी ऐप्लिकेशन सेशन में सेव की गई फ़ाइल के की-वैल्यू पेयर. कॉन्टेंट बनाने
प्राथमिकता लाइब्रेरी एक निजी SharedPreferences
इंस्टेंस का उपयोग करती है, ताकि केवल आपके
तो उसे ऐक्सेस कर सकें.
उदाहरण के लिए, मान लें कि
SwitchPreferenceCompat
:
<SwitchPreferenceCompat
app:key="notifications"
app:title="Enable message notifications"/>
जब कोई उपयोगकर्ता इस स्विच को "चालू है" पर टॉगल करता है स्थिति, SharedPreferences
फ़ाइल
"notifications" : "true"
के की-वैल्यू पेयर के साथ अपडेट. इसके लिए,
Preference
के लिए सेट की गई कुंजी के समान है.
SharedPreferences
एपीआई के बारे में ज़्यादा जानकारी के लिए, कुंजी-वैल्यू सेव करना देखें
डेटा.
Android पर डेटा सेव करने के अलग-अलग तरीकों के बारे में जानने के लिए, डेटा और फ़ाइल स्टोरेज के बारे में खास जानकारी देखें.
PreferenceDataStore
हालांकि प्राथमिकता लाइब्रेरी में SharedPreferences
के साथ डेटा इसके अनुसार मौजूद है
डिफ़ॉल्ट रूप से, SharedPreferences
हमेशा सही समाधान नहीं होते हैं. उदाहरण के लिए, अगर
आपके ऐप्लिकेशन में किसी उपयोगकर्ता को साइन इन करने की ज़रूरत है, तो हो सकता है कि आप जारी रखना
जिससे सेटिंग सभी पर दिखाई दे सकें.
अन्य डिवाइसों और प्लैटफ़ॉर्म पर काम करता है. इसी तरह, अगर आपके ऐप्लिकेशन में कॉन्फ़िगरेशन
खास तौर पर, डिवाइस के हिसाब से विकल्प उपलब्ध होते हैं. डिवाइस पर हर उपयोगकर्ता की अलग-अलग सेटिंग होती हैं,
इस वजह से, SharedPreferences
एक बेहतर समाधान नहीं है.
PreferenceDataStore
Preference
की वैल्यू को बनाए रखने के लिए, कस्टम स्टोरेज बैकएंड का इस्तेमाल किया जा सकता है. ज़्यादा के लिए
जानकारी के लिए, कस्टम डेटास्टोर का इस्तेमाल करें देखें.
प्राथमिकता मान पढ़ें
इस्तेमाल किए जा रहे SharedPreferences
ऑब्जेक्ट को वापस पाने के लिए, कॉल करें
PreferenceManager.getDefaultSharedPreferences()
.
हालांकि यह तरीका आपके ऐप्लिकेशन में कहीं से भी काम करता है, लेकिन हमारा सुझाव है कि
अलग-अलग लेयर में बांटा जा सकता है. ज़्यादा जानकारी के लिए, डेटा
लेयर.
उदाहरण के लिए, "signature"
की कुंजी के साथ EditTextPreference
दी गई, जैसे कि
अनुसरण करता है:
<EditTextPreference
app:key="signature"
app:title="Your signature"/>
इस Preference
के लिए सेव की गई वैल्यू को दुनिया भर में वापस लाया जा सकता है. इसके लिए, यह तरीका अपनाएं:
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this /* Activity context */)
val name = sharedPreferences.getString("signature", "")
SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this /* Activity context */);
String name = sharedPreferences.getString("signature", "");
प्राथमिकता मानों में हुए बदलावों को सुनें
Preference
की वैल्यू में हुए बदलावों को सुनने के लिए, इन दो वैल्यू में से किसी एक को चुना जा सकता है
इंटरफ़ेस:
नीचे दी गई टेबल में बताया गया है कि दोनों इंटरफ़ेस में क्या अंतर है:
OnPreferenceChangeListener |
OnSharedPreferenceChangeListener |
---|---|
सिंगल Preference पर सेट है. |
सभी Preference ऑब्जेक्ट पर लागू होती है. |
इसे तब कॉल किया जाता है, जब कोई Preference अपनी सेव की गई वैल्यू को बदलने वाला होता है,
भले ही, सेव की गई वैल्यू और सेव की गई वैल्यू एक ही हो. |
सिर्फ़ तब कॉल किया जाता है, जब Preference के लिए सेव की गई वैल्यू में बदलाव होता है. |
सिर्फ़ Preference लाइब्रेरी से कॉल किया गया. डिवाइस का अलग हिस्सा
ऐप्लिकेशन के सेव किए गए मान को बदल सकता है. |
सेव की गई वैल्यू में बदलाव होने पर कॉल किया जाता है, भले ही वह किसी दूसरी वैल्यू से हो ऐप्लिकेशन का हिस्सा है. |
'मंज़ूरी बाकी है' वैल्यू सेव होने से पहले कॉल किया जाता है. | वैल्यू सेव होने के बाद कॉल किया जाता है. |
SharedPreferences या
PreferenceDataStore . |
सिर्फ़ SharedPreferences का इस्तेमाल करने पर कॉल किया गया. |
OnPreferenceChangeListener लागू करें
OnPreferenceChangeListener
को लागू करने से, 'मंज़ूरी बाकी है' के लिए भी सुना जा सकता है
Preference
की वैल्यू में बदलाव करना होगा. इसके बाद, यह पुष्टि की जा सकती है कि
होता है. उदाहरण के लिए, नीचे दिया गया कोड दिखाता है कि
"name"
की कुंजी के साथ EditTextPreference
की वैल्यू:
override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
Log.e("preference", "Pending Preference value is: $newValue")
return true
}
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Log.e("preference", "Pending Preference value is: " + newValue);
return true;
}
इसके बाद, आपको इस लिसनर को सीधे इसके साथ सेट करना होगा
setOnPreferenceChangeListener()
इस तरह से:
preference.onPreferenceChangeListener = ...
preference.setOnPreferenceChangeListener(...);
OnSharedPreferenceChangeListener लागू करें
SharedPreferences
का इस्तेमाल करके, Preference
वैल्यू को बनाए रखने पर, इनका भी इस्तेमाल किया जा सकता है
बदलावों को सुनने के लिए SharedPreferences.OnSharedPreferenceChangeListener
.
यह आपको Preference
से सेव की गई वैल्यू में बदलाव होने पर, सूचना पाने की सुविधा देता है.
जैसे कि सर्वर के साथ सेटिंग सिंक करते समय. नीचे दिए गए उदाहरण में,
की कुंजी के साथ EditTextPreference
के मान में परिवर्तन को सुनने के लिए
"name"
:
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
if (key == "signature") {
Log.i(TAG, "Preference value was updated to: " + sharedPreferences.getString(key, ""))
}
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals("signature")) {
Log.i(TAG, "Preference value was updated to: " + sharedPreferences.getString(key, ""));
}
}
इसका इस्तेमाल करके लिसनर को रजिस्टर करें
registerOnSharedPreferenceChangedListener()
इस तरह से:
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(...)
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(...);
val listener: SharedPreferences.OnSharedPreferenceChangeListener =
SharedPreferences.OnSharedPreferenceChangeListener {...}
SharedPreferences.OnSharedPreferenceChangeListener listener =
new SharedPreferences.OnSharedPreferenceChangeListener() {...}
अपने Activity
या Fragment
में लाइफ़साइकल मैनेजमेंट के लिए, रजिस्टर करें और
जैसा कि दिखाया गया है, onResume()
और onPause()
कॉलबैक में इस लिसनर का रजिस्ट्रेशन रद्द करें
नीचे दिए गए उदाहरण में:
override fun onResume() {
super.onResume()
preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}
override fun onPause() {
super.onPause()
preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
}
@Override
public void onResume() {
super.onResume();
getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}
कस्टम डेटास्टोर का इस्तेमाल करें
हमारा सुझाव है कि SharedPreferences
का इस्तेमाल करके, Preference
ऑब्जेक्ट को बनाए रखें,
आप कस्टम डेटास्टोर का भी इस्तेमाल कर सकते हैं. कस्टम डेटास्टोर तब फ़ायदेमंद हो सकता है, जब
ऐप्लिकेशन किसी डेटाबेस के लिए मान बना रहता है या यदि मान डिवाइस-विशिष्ट हों, जैसे कि
नीचे दिए गए उदाहरणों में बताया गया है.
डेटास्टोर लागू करें
कस्टम डेटास्टोर लागू करने के लिए, ऐसी क्लास बनाएं जो
PreferenceDataStore
. नीचे दिए गए उदाहरण में ऐसा डेटास्टोर बनाया गया है जो
String
की वैल्यू:
class DataStore : PreferenceDataStore() {
override fun putString(key: String, value: String?) {
// Save the value somewhere.
}
override fun getString(key: String, defValue: String?): String? {
// Retrieve the value.
}
}
public class DataStore extends PreferenceDataStore {
@Override
public void putString(String key, @Nullable String value) {
// Save the value somewhere.
}
@Override
@Nullable
public String getString(String key, @Nullable String defValue) {
// Retrieve the value.
}
}
उपयोगकर्ता को ब्लॉक होने से बचाने के लिए, मुख्य थ्रेड से बाहर कार्रवाई करने में ज़्यादा समय लगता है
इंटरफ़ेस पर कॉपी करने की सुविधा मिलती है. क्योंकि ऐसा हो सकता है कि Fragment
या Activity
में
मान को बनाए रखते हुए नष्ट किया जाने वाला Datastore, डेटा को क्रम से लगाएं. ऐसा करने के लिए
उन वैल्यू को खोने से नहीं बचा जा सकता जिनमें उपयोगकर्ता ने बदलाव किया है.
डेटास्टोर चालू करें
डेटास्टोर लागू करने के बाद, नए डेटास्टोर को
onCreatePreferences()
ताकि Preference
ऑब्जेक्ट,
डेटास्टोर के बजाय डिफ़ॉल्ट SharedPreferences
का उपयोग करें. आप
हर Preference
या पूरे क्रम के लिए डेटास्टोर.
अगर आपको किसी खास Preference
के लिए कस्टम डेटा स्टोर चालू करना है, तो कॉल करें
setPreferenceDataStore()
Preference
पर, जैसा कि इस उदाहरण में दिखाया गया है:
val preference: Preference? = findPreference("key")
preference?.preferenceDataStore = dataStore
Preference preference = findPreference("key");
if (preference != null) {
preference.setPreferenceDataStore(dataStore);
}
अगर आपको पूरे क्रम के लिए कस्टम डेटा स्टोर चालू करना है, तो
PreferenceManager
को setPreferenceDataStore()
:
val preferenceManager = preferenceManager
preferenceManager.preferenceDataStore = dataStore
PreferenceManager preferenceManager = getPreferenceManager();
preferenceManager.setPreferenceDataStore(dataStore);
किसी खास Preference
के लिए सेट किया गया डेटास्टोर ऐसे किसी भी डेटास्टोर को बदल देता है जो
को संगत पदानुक्रम के लिए सेट किया गया है. ज़्यादातर मामलों में, आप
ट्रैक किया जा सकता है.