2012-02-08 10 views
9

मैं अब घंटों के लिए इस बहुत ही सरल समस्या पर फंस गया हूं और मैं Google के माध्यम से कोई उपयुक्त समाधान नहीं ढूंढ पाया।मैं गतिविधि के बाहर साझा किए गए संदर्भों का उपयोग कैसे करूं?

मैं अपने आवेदन की मॉडल परत में साझाप्रणाली कक्षा का उपयोग करने की कोशिश कर रहा हूं। विशेष रूप से मैं जब भी एप्लिकेशन शुरू होता हूं तो उपयोगकर्ता नाम और संबंधित टोकन को सहेजने या लाने में सक्षम होना चाहता हूं (यदि उपयोगकर्ता ऑटो लॉगिन के लिए एप्लिकेशन सेट करता है)।

क्या इस मुद्दे के लिए साझा किए गए संदर्भों का उपयोग करने का कोई तरीका है या क्या मुझे फ़ाइल इनपुट/आउटपुट का उपयोग करने के लिए मजबूर किया गया है?

उत्तर

26

आप अपने मॉडल वर्ग कहाँ का दृष्टांत करते हैं?

बस या तो एक संदर्भ या निर्माता को SharedPreferences पारित:

public class Model { 
    private final Context context; 
    private final SharedPreferences sharedPrefs; 

    public Model(Context context) { 
     this.context = context; 
     sharedPrefs = context.getSharedPreferences("name", 0); 
    } 

    private String doSomething(){ 
     return sharedPrefs.getString("key", "defValue"); 
    } 
} 
+0

ठीक है। लेकिन अगर मैं एक से अधिक गतिविधियों से इस डेटा तक पहुंचना चाहता हूं तो क्या इससे कोई समस्या नहीं आती है? – CodePrimate

+0

यदि आपने एक से अधिक गतिविधियों से डेटा तक पहुंचा है, तो आप एक नए कंस्ट्रक्टर का उपयोग करेंगे जिसका मतलब है? यदि आप गतिविधि में समान साझाकरण चाहते हैं तो यह केवल 'नाम' पर निर्भर है। – Blundell

+0

धन्यवाद। यह मेरी समस्या को हल करने में महत्वपूर्ण हो गया। – CodePrimate

4

SharedPreferences केवल Activity से नहीं कहा जाता है, लेकिन Context से (जो Activity फैली) ताकि आप के रूप में अच्छी आवेदन संदर्भ का उपयोग कर सकते हैं।

+0

मैं भी छोटे इंजेक्शन पुस्तकालय, जो वरीयताओं के लिए आसान उपयोग की अनुमति देता developerd: https://github.com/ko5tik/andject तुम सिर्फ कर सकते हैं बीन गुणों में वरीयताओं को इंजेक्ट/निकालें। –

0

आप किसी भी कोड से साझा किए गए SharePrederences का उपयोग कर सकते हैं। http://developer.android.com/reference/android/app/Activity.html पर गतिविधि प्रलेखन से:

गतिविधि लगातार राज्य विधि getPreferences (पूर्णांक) के साथ किया जाता है, तो आप निकालते हैं और गतिविधि के साथ जुड़ा नाम/मान युग्म का एक सेट को संशोधित करने की इजाजत दी। वरीयताओं का उपयोग करने के लिए जो कई अनुप्रयोग घटकों (गतिविधियों, रिसीवर, सेवाओं, प्रदाताओं) में साझा किए जाते हैं, आप अंतर्निहित Context.getSharedPreferences() विधि का उपयोग किसी विशिष्ट नाम के तहत संग्रहीत प्राथमिकता ऑब्जेक्ट को पुनर्प्राप्त करने के लिए कर सकते हैं। (ध्यान दें कि यह आवेदन संकुल भर में सेटिंग डेटा को साझा करने के लिए संभव नहीं है -। उसके लिए आपको एक सामग्री प्रदाता की आवश्यकता होगी)

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