2011-08-05 8 views
14

मैं एंड्रॉइड साझा प्राथमिकताएं देख रहा हूं और मुझे आश्चर्य है कि प्राथमिकता फ़ाइल मौजूद है या नहीं, यह जांचने का कोई तरीका है।यह देखने के लिए कि SharePreferences फ़ाइल मौजूद है या नहीं

SharedPreferences mySharedPreferences ; 
mySharedPreferences=getSharedPreferences(“Name_of_your_preference”,mode); 

यह ऊपर कोड मुझे विश्वास है कि "Name_of_Your_preferene" एक फ़ाइल या आपकी प्राथमिकताओं में शामिल होंगे कंटेनर के कुछ प्रकार के रूप में जमा है।

मुझे आश्चर्य है कि यह मौजूद है या नहीं, यह जांचने के लिए दूर है। जब कोई उपयोगकर्ता कोई गतिविधि लोड करता है तो मैं कुछ डिफ़ॉल्ट मानों (सभी सेटिंग्स के लिए बंद) के साथ इस फ़ाइल में सभी सेटिंग्स को सहेजना चाहता हूं। हालांकि मैं केवल यह करना चाहता हूं अगर वे पहली बार पेज पर जा रहे हैं।

अन्यथा अगर मैं हर समय कुछ इस तरह करना होगा पृष्ठ लोड

SharedPreferences.Editor editor= mySharedPreferences.edit(); 

/* now store your primitive type values. In this case it is true, 1f and Hello! World */ 

editor.putBolean(“myBoolean”,true); 

editor.putFloat(“myFloat”,1f); 

editor.putString(“myString”,” Hello! World”); 

मैं यह सब सेटिंग भी जिनके पास वे सेट ओवरराइड होगा अनुमान लगा रहा हूँ।

उत्तर

19

साझा किए गए संदर्भ एक XML फ़ाइल में सहेजे गए हैं। आप यह जांचने के लिए SharedPreferences 'Name_of_your_preference' मौजूद /data/data/your_application_package/shared_prefs/Name_of_your_preference.xml

में पा सकते हैं:

File f = new File(
"/data/data/your_application_package/shared_prefs/Name_of_your_preference.xml"); 
if (f.exists()) 
    Log.d("TAG", "SharedPreferences Name_of_your_preference : exist"); 
else 
    Log.d("TAG", "Setup default preferences"); 

सादर।

+0

तो मैं सिर्फ एम्यूलेटर के माध्यम से ब्राउज़ करें? – chobo2

+0

हां, एडीबी या ब्राउज़र एप्लिकेशन या कोड के साथ, जैसा आप चाहते हैं! – FinalSpirit

+0

@ फाइनलस्पिट-एडीबी? – chobo2

18

पर विधि पर आप contains विधि का उपयोग कर सकते हैं ताकि यह जांच सके कि आपकी प्राथमिकता कुंजी में से कोई एक फ़ाइल में मौजूद है या नहीं। यदि यह false देता है, तो आप मान सकते हैं कि यह पहली बार है और डिफ़ॉल्ट सेटिंग्स को पॉप्युलेट करता है। इस विधि के लिए प्रलेखन here है।

मुझे यह जांचने का कोई तरीका नहीं मिला कि कोई वरीयता फ़ाइल पहले से मौजूद है या नहीं (यह पहली बार आपके द्वारा एक संपादक को पुनर्प्राप्त करने के लिए स्वचालित रूप से बनाया जाएगा), लेकिन इस विधि को चाल चलनी चाहिए।

+3

कैसे के बारे में अगर मैं का उपयोग getAll() के बाद से यह केवल वरीयताओं के रूप में "Name_of_your_preference" ठीक होगा? तो अगर गिनती शून्य होगी तो मुझे लगता है कि यह नहीं बनाया जाएगा? – chobo2

+0

भी काम करना चाहिए। यह वरीयता का मामला है, मुझे लगता है, लेकिन 'getAll()' 'के मामले में आपको अपने आकार की जांच करने के लिए 'मानचित्र' ऑब्जेक्ट को तुरंत चालू करना होगा। मूल विधि बस एक तेज बूलियन परीक्षण की तरह लगती है। –

+0

मैं monodroid का उपयोग कर रहा हूँ। इसमें एक गिनती कार्य है इसलिए मुझे लगता है कि मैं ठीक हूँ। – chobo2

1

मैंने इसे इस तरह से अनुकूलनीय आईएमओ किया।

File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + getPackageName()+ "_preferences.xml"); 

if(f.exists()) 
{ 
    //do stuff`enter code here` 
} 

मैं onCreate पर एक सत्यापन प्रक्रिया में इस का इस्तेमाल किया वरीयताओं मौजूद है या नहीं और जवाब के आधार पर प्राथमिकताएं या नहीं खाली करने के लिए एक बटन को सक्षम करता है, तो - बस सत्यापित करें कि आपके वरीयता फ़ाइल का नाम डी डी एम एस में है अगर इसे मैन्युअल रूप से नामित नहीं किया गया है।

+0

हाय natur3, फ़ाइल पथ को पढ़ना नहीं चाहिए: फ़ाइल f = नई फ़ाइल ("/ डेटा/डेटा /" + getPackageName() + "/shared_prefs/_preferences.xml"); दूसरे getPackageName() के बिना? जब मैंने आपका कोड इस्तेमाल किया तो यह एक मौजूदा निर्देशिका में गया और इसलिए सहेजा नहीं जाएगा। –

4

मेरे पास natur3 की पोस्ट पर टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं थे। इसलिए यह जवाब।

@ natur3: बहुत उपयोगी, धन्यवाद। हालांकि फ़ाइल फ़ाइल प्रत्यय के साथ मुझे एक छोटी सी समस्या थी। अगर मैं इस तरह मेरे फ़ाइल नाम को परिभाषित:

private static final String FILENAME = "myPrefs"; 

और फिर उपयोग करें:

File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME); 

f.exists() भले ही फ़ाइल फाइल सिस्टम पर मौजूद है अवास्तविक लौटाते हैं। इसका कारण यह है एंड्रॉयड जब SharedPreferences लिख तो मैं इस तरह मेरी फाइल संदर्भ नज़र करना था स्वचालित रूप से ".xml" प्रत्यय जोड़ देगा है:

File f = new File("/data/data/" + getPackageName() + "/shared_prefs/" + FILENAME + ".xml"); 

यह काम करने के लिए। मुझे नहीं पता कि आपको कहां से "_preferences.xml" प्रत्यय मिला है।

मैं विंडो-> शो देखें-> अन्य ... का उपयोग करके ग्रहण में एमुलेटर फाइल सिस्टम ब्राउज़ करके इसे समझने में कामयाब रहा और फिर "फ़ाइल एक्सप्लोरर" का चयन करें।

2

बजाय हार्ड-कोड "/ डेटा/डाटा /" पथ आप यह कर सकते हैं:

public boolean preferenceFileExist(String fileName) { 
    File f = new File(getApplicationContext().getApplicationInfo().dataDir + "/shared_prefs/" 
      + fileName + ".xml"); 
    return f.exists() 
} 
0

सबसे आसान तरीका मैंने पाया, हम देख सकते हैं कि साझा वरीयता में एक निर्मित से मौजूद एंड्रॉइड

sharePrefName.contains(String key) // as if (userData.contains("name")){Toast // Your data is already here!} 

जांचता है कि वरीयताओं में वरीयता है या नहीं। (यह सार बूलियन सार्वजनिक विधि है)

सरल और आसान :)