2012-08-22 16 views
7

मैं एक और एप्लिकेशन के माध्यम से एक अनुप्रयोग के SharedPreferences संपादित करने के लिए कोशिश कर रहा हूँ नहीं बना सका, मेरे कोड इसएंड्रॉयड: SharedPreferences के लिए निर्देशिका फ़ाइल

try { 
Context plutoContext = getApplicationContext().createPackageContext("me.test",Context.MODE_WORLD_WRITEABLE); 
SharedPreferences plutoPreferences = PreferenceManager.getDefaultSharedPreferences(plutoContext); 
Editor plutoPrefEditor = plutoPreferences.edit(); 
plutoPrefEditor.putString("country", "India"); 
plutoPrefEditor.commit(); 
} 

की तरह चला जाता है मैं एक त्रुटि

E/SharedPreferencesImpl( 304): Couldn't create directory for SharedPreferences file /data/data/me.test/shared_prefs/me.test_preferences.xml

हो रही है

जहां me.test मेरी अन्य परियोजना है ..te proj मैं SharedPreferences को बिना दर्द के

संपादित और पुनर्प्राप्त कर सकता हूं

मैं नेक्सस एस एंड्रॉयड 4.0.4 (Samsung) पर यह परीक्षण कर रहा हूँ, किसी भी एक मदद कर सकते हैं मुझे

+1

आपकी "me.test" प्रोजेक्ट ने 'MODE_WORLD_WRITEABLE' के साथ साझा किए गए संदर्भ बनाए हैं? – WarrenFaith

+0

@ वॉरेनफाइथ, टिप्पणी के लिए धन्यवाद। मैं नहीं जानता कि 'MODE_WORLD_WRITEABLE' कैसे बनाएं, मैंने अभी सामान्य –

+0

बनाया है क्या आप अपवाद भी लिख सकते हैं? – teoREtik

उत्तर

1

बस इस ऐप्लिकेशन में भिन्न पैकेज नाम का उपयोग करें। इससे एक अलग निर्देशिका में वरीयताएं पैदा होंगी।

0

यदि आपका पहला ऐप एक साझा प्लेरेंस बनाना चाहता है जिसे किसी अन्य ऐप द्वारा पढ़ा जा सकता है, तो सुनिश्चित करें कि आप सही मोड के साथ साझा प्रेफरेंस बनाते हैं। अधिक जानकारी के लिए getSharedPreferences() या PreferenceManager कक्षा पर नज़र डालें।

1

वैसे, (यह प्रश्न से संबंधित नहीं है, लेकिन किसी भी तरह से) आप गलत तरीके से createPackageContext() विधि का उपयोग करते हैं। आप MODE_WORLD_WRITEABLE ध्वज पास करते हैं जो मान है और CONTEXT_IGNORE_SECURITY ध्वज के बराबर है, इसलिए यह गलत तरीके से तर्क, आईएमएचओ द्वारा व्याख्या किया जाएगा।

+0

मुझे IMHO के बारे में बहुत कुछ पता नहीं है।मेरी मूल बात यह है कि एक ऐप की साझा प्राथमिकताओं को किसी अन्य ऐप से –

+0

से संपादित करना है, इसलिए आपको 'MODE_WORLD_WRITEABLE' मोड' का उपयोग करके 'getSharedPreferences (स्ट्रिंग नाम, int मोड)' के साथ 'SharePreferences' का उपयोग करना चाहिए, जिसे @WarrenFaith ने कहा था। – teoREtik

+0

MODE_WORLD_WRITEABLE अब बहिष्कृत है –

4

आपने अपने AndroidManifest.xml में अनुमतियाँ जोड़ने की जरूरत:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

मैं तुम्हारे साथ एक ही समस्या है, और मैं इसके बाद के संस्करण समाधान के साथ इसे हल।

+0

क्या आप वाकई साझा किए गए prefs तक पहुंचने के लिए अनुमतियां जोड़ रहे हैं? –

0

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

नोट - एक ऐप में केवल एक डिफ़ॉल्ट साझा वरीयता।

0

इस समस्या को हल करने के लिए अपने सैमसंग डिवाइस को रीबूट करें।

संबंधित मुद्दे