2012-06-01 20 views
7

पर स्थिर संदर्भ नहीं बना सकता है। मैं एंड्रॉइड.एप के उप-वर्ग का उपयोग करके अपने एंड्रॉइड ऐप में गतिविधियों के दौरान एक वैश्विक चर संग्रहीत कर रहा हूं। आवेदन के रूप में जल्द ही सुनील द्वारा समझाया गया है (How to declare global variables in Android? में)।गैर-स्थैतिक विधि (एंड्रॉइड getAplicationContext())

दृष्टिकोण इस तरह दिखता है:

class MyApp extends Application { 

    private String myState; 

    public String getState(){ 
    return myState; 
    } 
     public void setState(String s){ 
     myState = s; 
    } 
} 

class Blah extends Activity { 

    @Override 
    public void onCreate(Bundle b){ 
    ... 
    MyApp appState = ((MyApp)getApplicationContext()); 
    String state = appState.getState(); 
    ... 
    } 
} 

इस बिंदु तक, इस दृष्टिकोण मेरी क्रियाएँ में से किसी से वैश्विक चर तक पहुँचने के लिए ठीक काम किया है। लेकिन आज एक ही दृष्टिकोण का उपयोग कर, मैं निम्नलिखित त्रुटि मिली:

Cannot make a static reference to the non-static method getApplicationContext() 
from the type ContextWrapper 

पहले से महत्वपूर्ण अंतर यह है कि नई गतिविधि वास्तव में एक टुकड़ा (SherlockFragmentActivity, सटीक होना करने के लिए) है।

कोई भी विचार मैं ऐपस्टेट तक क्यों नहीं पहुंच सकता क्योंकि मेरे पास पहले है, और क्या कोई अच्छा कामकाज है?

बहुत धन्यवाद।


संपादित करें: अच्छी पकड़, मैट बी यह पता चला जगह मैं वास्तव में getApplicationContext फोन कर रहा हूँ() अन्य वर्ग के अंदर है। यहाँ बुला बिंदु है:

public class MyActivity extends SherlockFragmentActivity { 
    public static class AccountListFragment extends SherlockListFragment { 
     MyApp appState = ((MyApp)getApplicationContext()); 
     ... 
    } 
    ... 
} 

इसके अलावा, जैसा नीचे वर्णित है, त्रुटि दूर चला गया जब मैं

MyApp appState = ((MyApp)getActivity().getApplicationContext()); 
+0

कर सकते हैं हम आपके गतिविधि में वास्तविक कोड देखते हैं जो शेरलॉक फ्रैगमेंट एक्टिविटी बढ़ाता है? संपादित करें: मैंने 'एप्लिकेशन ऐपस्टेट = ((एप्लिकेशन) getAplicationContext()) की कोशिश की;' मेरे 'शेरलॉक फ्रैगमेंट एक्टिविटी' में और यह ठीक से संकलित करता है। –

+0

मुझे नहीं पता कि इस कोड नमूने में आप उस विधि के लिए एक स्थिर संदर्भ बनाने का प्रयास कर रहे हैं। क्या आप वाकई सही लाइन पोस्ट कर चुके हैं? –

+0

क्या आप उत्तर को सही के रूप में चिह्नित कर सकते हैं? – vanleeuwenbram

उत्तर

4
getActivity().getApplication() 

करने के लिए कॉल बदल ठीक काम करना चाहिए।

आप पहली बार तो आवेदन करने के लिए, गतिविधि के लिए एक संदर्भ की जरूरत है

अंतर अब आप एक टुकड़ा से इस कार्यप्रणाली को कॉल कर रहे हैं कि (भले ही आप यह नाम "गतिविधियां") एक गतिविधि के बजाय है

+0

अपने प्रश्न के मुताबिक वह कहता है कि यह शेरलॉक फ्रैगमेंट एक्टिविटी है। अगर वह वास्तव में शेरलॉक फ्रैगमेंट का मतलब है, तो आपका जवाब सही हो सकता है। –

+0

"नई गतिविधि वास्तव में एक टुकड़ा है (शेरलॉक फ्रैगमेंट एक्टिविटी, सटीक होना)।" मैं समझता हूं कि उसने अपना टुकड़ा "शेरलॉक फ्रैगमेंट एक्टिविटी" नाम दिया है – vanleeuwenbram

+0

धन्यवाद, ऐसा लगता है कि त्रुटि को मंजूरी दे दी गई है! हालांकि स्पष्ट होने के लिए, क्या आपको पता है कि मुझे इस मामले में getActivity() कॉल जोड़ने की आवश्यकता क्यों है (शेरलॉक फ्रैगमेंट एक्टिविटी के अंदर से), लेकिन पहले नहीं (सामान्य गतिविधि के अंदर से)? – gcl1

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

  • कोई संबंधित समस्या नहीं^_^