2011-09-20 9 views
27

आप गैर-गतिविधि कक्षा में साझा किए गए संदर्भों का उपयोग कैसे करते हैं? मैंने एक सामान्य प्राथमिकता उपयोगिता वर्ग बनाने और android.content.Context आयात करने का प्रयास किया लेकिन ग्रहण अभी भी मुझे getSharedPreferences() का उपयोग करने नहीं देगा।एंड्रॉइड - गैर-गतिविधि कक्षा में साझा किए गए संदर्भों का उपयोग कैसे करें?

उत्तर

38

साझा किए गए संदर्भ संदर्भ से संबंधित हैं। आप इसे संदर्भ के माध्यम से संदर्भित कर सकते हैं।

आप बस अपनी कक्षा में पैरामीटर के रूप में संदर्भ पारित कर सकते हैं। उदाहरण के लिए निर्माता में।

अपनी गतिविधि में कार्य करें:

MyClass myClass = new MyClass(this); 
+8

आह! मुझे इसी की तो तलाश थी। सरल और स्पष्ट उत्तर के लिए धन्यवाद। अब मैं 'context.getSharedPreferences();' का उपयोग कर इसे एक्सेस कर सकता हूं। –

+0

त्रुटि MODE_PRIVATE को एक चर – Prasad

+1

पर हल नहीं किया जा सकता था मेरी गतिविधि मेरे अन्य वर्ग निर्माता ('साझाकरण संदर्भ' वाली कक्षा) में 'this' की अनुमति नहीं देती है। – Azurespot

2

एप्लिकेशन संदर्भ के साथ default preferences का उपयोग करने का प्रयास करें। एक संदर्भ वातावरण के समान होता है जो एक अनुप्रयोग लिनक्स या विंडोज़ पर चलता है (उदाहरण के लिए पाथ विंडोिंग शैली या कंसोल आकार जैसे पर्यावरण चर)। प्रत्येक गतिविधि और सेवा का अपना संदर्भ भी उदाहरण के लिए स्क्रीन अभिविन्यास, विषय, और लेबल इत्यादि है, लेकिन आपके आवेदन के लिए आप गतिविधि का संदर्भ नहीं चाहते हैं, आप ऐप को कुछ वैश्विक चाहते हैं, यह वह जगह है जहां context.getApplicationContext() उपयोगी है । यह पूरे ऐप में समान है और हमेशा आपको वही डिफ़ॉल्ट वरीयता देगा।

+0

बनाने आप विस्तार से बता सकते हैं? मैंने 'SharedPreferences prefs = getDefaultSharedPreferences (यह) की कोशिश की;' लेकिन यह काम नहीं करता है। –

+0

मैंने अपना जवाब विस्तारित कर लिया है। –

+0

'वरीयता प्रबंधक .getDefaultSharedPreferences (applicationContext) का उपयोग करें;' चाहे आप कोड में हों, इससे कोई फर्क नहीं पड़ता कि इसे प्राथमिकताएं उपयोग करने के लिए संदर्भ की आवश्यकता है। –

39

समाधान मैं इस पाया था:

1-में एक MainActivity वर्ग (यानी हमेशा परियोजना में किसी भी संदर्भ से पहले शुरू की) के लिए एक स्थिर चर बना संदर्भ:

public static Context contextOfApplication;

2-में इस वर्ग (इस तरह के onCreate, निर्माता, आदि) का एक importante विधि initi एलीज़ इस चर getApplicationContext विधि का उपयोग कर:

public static Context getContextOfApplication(){ 
    return contextOfApplication; 
} 

4-गैर:

public void onCreate() { 
    contextOfApplication = getApplicationContext(); 
} 

एक ही कक्षा 3-में इस चर के लिए एक "गेटर" विधि (यह भी स्थिर होना चाहिए) बनाएं - निष्क्रियता वर्ग को बनाई गई विधि को स्थिर रूप से कॉल करके संदर्भ प्राप्त होता है:

Context applicationContext = MyActivityClass.getContextOfApplication();

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(applicationContext); 

आशा है कि यह मदद करता है:

5-उपयोग PreferenceManager कक्षा SharedPreferences चर प्राप्त करने के लिए।

+4

यह एक उपयोगी कामकाज है, मैं एक निजी क्षेत्र – FredMaggiowski

+0

के रूप में contextOfAplication का उपयोग करने का सुझाव दूंगा, आप एप्लिकेशनकॉन्टेक्स्ट.getSharedPreferences (pref_name, MODE_PRIVATE) का भी उपयोग कर सकते हैं; –

0

सबसे पहले, अपनी कक्षा में एक निजी विशेषता घोषित करें।

private final Context ctx; 
private final Vector<Acto> actos; 

public ActoAdaptador(Context ctx, Vector<Acto> as) { 
    super(); 
    this.ctx = ctx; 
    this.actos = as; 
} 

तब, जब SharedPreferences उपयोग करने के लिए:

ctx.getSharedPreferences("com.joninazio.euskofest.UsingPreferences_preferences", Context.MODE_PRIVATE) 

इस तरह एक करने के लिए मेरे लिए काम करता है कम से कम :)

1

उपयोग इस कोड को मेरे मामले में, मैं एक BaseAdapter वर्ग है नई कक्षा

import android.content.Context; 
import android.content.SharedPreferences; 

/** 
    * Created by Atiar Talukdar on 6/5/2017. 
*/ 

public class TemporaryStorageSharedPreference { 
protected final static int DEFAULT = 0; 
int temp = 0; 

public int readSharedPreference(Context context, String spName,String key){ 
    SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); 
    return temp = sharedPreferences.getInt(key,DEFAULT); 
} 

public void writeSharedPreference(Context context,String ammount,String spName,String key){ 

    SharedPreferences sharedPreferences = context.getSharedPreferences(spName, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putInt(key, DEFAULT); 
    editor.commit(); 
} 
} 
0

SharedPreferences वर्ग

/** 
    * @param mContext 
    * @param key 
    * @param value 
    */ 
    public static void savePreferences(Context mContext, String key, String value) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putString(key, value).apply(); 
    } 

    /** 
    * @param context 
    * @param keyValue 
    * @return 
    */ 
    public static String getPreferences(Context context, String keyValue) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context); 
     return sharedPreferences.getString(keyValue, ""); 
    } 

    /** 
    * @param mContext 
    */ 
    public static void removeAllSharedPreferences(Context mContext) { 
     SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(mContext); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.clear().apply(); 
    } 
संबंधित मुद्दे