2012-07-31 25 views
62

में एंड्रॉइड साझा किए गए संदर्भ मैं फ्रैगमेंट के अंदर साझा किए गए संदर्भ पढ़ने की कोशिश कर रहा हूं। मेरा कोड वह है जो मैं किसी अन्य गतिविधि में वरीयता प्राप्त करने के लिए उपयोग करता हूं।फ्रैगमेंट

 SharedPreferences preferences = getSharedPreferences("pref", 0); 

मैं त्रुटि

Cannot make a static reference to the non-static method getSharedPreferences(String, int) from the type ContextWrapper  

मैं इन लिंक का अनुसरण करने की कोशिश की, लेकिन कोई किस्मत Accessing SharedPreferences through static methods और Static SharedPreferences साथ है मिलता है। किसी भी समाधान के लिए धन्यवाद।

उत्तर

176

विधि getSharedPreferencesContext वस्तु की एक विधि है, तो एक Fragment से सिर्फ बुला getSharedPreferences काम नहीं करेगा ... क्योंकि यह एक प्रसंग नहीं है! (गतिविधि संदर्भ का एक विस्तार है, इसलिए हम इसे प्राप्त करने वाले संदर्भों को कॉल कर सकते हैं)।

तो तुम सावधानी के एक नोट यह उत्तर मेरे ऊपर उपयोगकर्ता द्वारा प्रदान की सही है के रूप में द्वारा

// this = your fragment 
SharedPreferences preferences = this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
+1

getSharedPreferences ("वरी", 0); शून्य (0) का मतलब क्या निजी/सार्वजनिक है? – Kailas

+0

@ कैलास सही, मोड, यानी WORLD_READABLE ect। http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String, int) – Jug6ernaut

+0

किस प्रकार का मोड मैंने साझा प्राथमिकताओं का उपयोग केवल उस एप्लिकेशन द्वारा एक्सेस किया था कोई अन्य एप्लिकेशन नहीं साझा वरीयता मानों को पढ़ें/लिखें? – Kailas

4

अपने अनुप्रयोगों के संदर्भ निकलना है।

SharedPreferences preferences = this.getActivity().getSharedPreferences("pref",0); 

हालांकि, अगर आप onAttach से पहले टुकड़ा में कुछ भी पाने के लिए प्रयास करने के getActivity कहा जाता है() अशक्त वापस आ जाएगी।

+1

और गतिविधि पूरी तरह से प्रारंभ नहीं की जाती है जब तक एक्टिविटीक्रेटेड कहा जाता है ... – hotzen

9

उल्लेखनीय जवाब मेरे लिए काम नहीं किया, मैं का इस्तेमाल किया था

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 

संपादित करें:

या बस को हटाने this कोशिश:

SharedPreferences prefs = getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE); 
+3

चिह्नित उत्तर आपके लिए काम नहीं किया है क्योंकि आप डिफ़ॉल्ट साझा प्राथमिकताओं तक पहुंच रहे हैं। एक बेहतर डिज़ाइन आपकी प्राथमिकताओं को किसी साझा ऑब्जेक्ट के रूप में नहीं बल्कि एक अलग और निजी स्थान पर संग्रहीत करना है, जो प्रश्न और उत्तर यहां है। – zeeshan

0

आप SharedPrefences कर सकते हैं onAttach इस तरह के टुकड़े की विधि:

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    SharedPreferences preferences = context.getSharedPreferences("pref", 0); 
} 
संबंधित मुद्दे