सेव की गई प्राथमिकता वाली वैल्यू का इस्तेमाल करें 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 के लिए सेव की गई वैल्यू को दुनिया भर में वापस लाया जा सकता है. इसके लिए, यह तरीका अपनाएं:

Kotlin

val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this /* Activity context */)
val name = sharedPreferences.getString("signature", "")

Java

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 की वैल्यू:

Kotlin

override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
    Log.e("preference", "Pending Preference value is: $newValue")
    return true
}

Java

@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
    Log.e("preference", "Pending Preference value is: " + newValue);
    return true;
}

इसके बाद, आपको इस लिसनर को सीधे इसके साथ सेट करना होगा setOnPreferenceChangeListener() इस तरह से:

Kotlin

preference.onPreferenceChangeListener = ...

Java

preference.setOnPreferenceChangeListener(...);

OnSharedPreferenceChangeListener लागू करें

SharedPreferences का इस्तेमाल करके, Preference वैल्यू को बनाए रखने पर, इनका भी इस्तेमाल किया जा सकता है बदलावों को सुनने के लिए SharedPreferences.OnSharedPreferenceChangeListener. यह आपको Preference से सेव की गई वैल्यू में बदलाव होने पर, सूचना पाने की सुविधा देता है. जैसे कि सर्वर के साथ सेटिंग सिंक करते समय. नीचे दिए गए उदाहरण में, की कुंजी के साथ EditTextPreference के मान में परिवर्तन को सुनने के लिए "name":

Kotlin

override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
    if (key == "signature") {
        Log.i(TAG, "Preference value was updated to: " + sharedPreferences.getString(key, ""))
    }
}

Java

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
    if (key.equals("signature")) {
        Log.i(TAG, "Preference value was updated to: " + sharedPreferences.getString(key, ""));
    }
}

इसका इस्तेमाल करके लिसनर को रजिस्टर करें registerOnSharedPreferenceChangedListener() इस तरह से:

Kotlin

preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(...)

Java

getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(...);

Kotlin

    val listener: SharedPreferences.OnSharedPreferenceChangeListener =
            SharedPreferences.OnSharedPreferenceChangeListener {...}
    

Java

    SharedPreferences.OnSharedPreferenceChangeListener listener =
            new SharedPreferences.OnSharedPreferenceChangeListener() {...}
    

अपने Activity या Fragment में लाइफ़साइकल मैनेजमेंट के लिए, रजिस्टर करें और जैसा कि दिखाया गया है, onResume() और onPause() कॉलबैक में इस लिसनर का रजिस्ट्रेशन रद्द करें नीचे दिए गए उदाहरण में:

Kotlin

override fun onResume() {
    super.onResume()
    preferenceManager.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
}

override fun onPause() {
    super.onPause()
    preferenceManager.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
}

Java

@Override
public void onResume() {
    super.onResume();
    getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
}

@Override
public void onPause() {
    super.onPause();
    getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
}

कस्टम डेटास्टोर का इस्तेमाल करें

हमारा सुझाव है कि SharedPreferences का इस्तेमाल करके, Preference ऑब्जेक्ट को बनाए रखें, आप कस्टम डेटास्टोर का भी इस्तेमाल कर सकते हैं. कस्टम डेटास्टोर तब फ़ायदेमंद हो सकता है, जब ऐप्लिकेशन किसी डेटाबेस के लिए मान बना रहता है या यदि मान डिवाइस-विशिष्ट हों, जैसे कि नीचे दिए गए उदाहरणों में बताया गया है.

डेटास्टोर लागू करें

कस्टम डेटास्टोर लागू करने के लिए, ऐसी क्लास बनाएं जो PreferenceDataStore. नीचे दिए गए उदाहरण में ऐसा डेटास्टोर बनाया गया है जो String की वैल्यू:

Kotlin

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.
    }
}

Java

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 पर, जैसा कि इस उदाहरण में दिखाया गया है:

Kotlin

val preference: Preference? = findPreference("key")
preference?.preferenceDataStore = dataStore

Java

Preference preference = findPreference("key");
if (preference != null) {
    preference.setPreferenceDataStore(dataStore);
}

अगर आपको पूरे क्रम के लिए कस्टम डेटा स्टोर चालू करना है, तो PreferenceManager को setPreferenceDataStore():

Kotlin

val preferenceManager = preferenceManager
preferenceManager.preferenceDataStore = dataStore

Java

PreferenceManager preferenceManager = getPreferenceManager();
preferenceManager.setPreferenceDataStore(dataStore);

किसी खास Preference के लिए सेट किया गया डेटास्टोर ऐसे किसी भी डेटास्टोर को बदल देता है जो को संगत पदानुक्रम के लिए सेट किया गया है. ज़्यादातर मामलों में, आप ट्रैक किया जा सकता है.