2011-11-13 8 views
7

मैं एंड्रॉइड प्रोग्रामिंग में शामिल होने की कोशिश कर रहा हूं, और मुझे एक पुस्तक से कुछ उदाहरण ले लिए गए हैं। इन उदाहरण के पर में निम्न कोड डाल करने के लिए अनुरोध किया गया है:क्यों बंडल ऑब्जेक्ट हमेशा क्रेट() पर शून्य है?

public class ExemploCicloVida extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     Log.i(TAG, getClassName() + " onCreate() called on: " + icicle); 

     TextView t = new TextView(this); 
     t.setText("Exemplo de ciclo de vida de uma Activity.\nConsulte os logs no LogCat"); 
     setContentView(t); 
    } 
} 

मुझे आश्चर्य है कि बंडल वस्तु हमेशा इस मामले पर शून्य है क्यों।

उत्तर

13

यदि कोई पूर्व-सहेजी गई स्थिति नहीं है तो बंडल शून्य हो जाएगा।

यह Activity API documentation में उल्लिखित है।

2

इस कोड को चलाएं और Ctrl + F11 दबाकर स्क्रीन को घुमाएं। बंडल शून्य नहीं होगा।

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    if (savedInstanceState != null) { 
     Toast.makeText(this, savedInstanceState.getString("s"), 
       Toast.LENGTH_LONG).show(); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    outState.putString("s", "hello"); 
} 

onSaveInstanceState(Bundle) कहा जाएगा। फिर, गतिविधि ऑब्जेक्ट बनाया गया है और onCreated(Bundle) को गैर-शून्य Bundle savedInstanceState के साथ बुलाया जाएगा।

+1

धन्यवाद wannik। एपीआई ने मुझे सुराग दिया और तुम्हारा भी, मैंने अपने कोड पर Ctrl + F11 टाइप किया, और आईकिकल अब शून्य नहीं था। –

8

मेरे मामले में, कारण यह था कि विशिष्ट गतिविधि में मैनिफेस्ट फ़ाइल में कोई विषय घोषित नहीं किया गया था।

इसे ठीक करने के लिए, AndroidManifest.xml खोलें, एप्लिकेशन पर क्लिक करें, एप्लिकेशन नोड्स में क्रैशिंग गतिविधि का चयन करें और थीम के थीम फ़ील्ड में विषय जोड़ें। मेरे मामले में, यह

@style/Theme.AppCompat.Light.DarkActionBar 

लेकिन आप थीम को अपनी अन्य गतिविधियों में से एक से कॉपी कर सकते हैं।

पीएस .: मुझे पता है कि यह एक पुराने प्रश्न का उत्तर है, लेकिन मैंने इसे ठीक करने के दौरान उस पर ठोकर खाई है और एक समाधान समाधान नहीं मिला है जिससे यह दूसरों की मदद कर सके।

+1

इस में आपके इनपुट के लिए बहुत बहुत धन्यवाद !!! आपने मुझे बहुत सारे सिरदर्द बचाए ... मैंने अपनी पिछली गतिविधि में विषय बदल दिया था, लेकिन उस गतिविधि में नहीं जहां मुझे नल पॉइंटर मिल रहा था! मैंने कभी सोचा नहीं होगा कि यह मुद्दा था! दोबारा ... मिड असफल हो जाओ! –

+0

आपका बहुत स्वागत है! मैंने इसे समझने के लिए बहुत सारे घंटे बर्बाद कर दिए ताकि मुझे यह सुनकर खुशी हो कि किसी ने इस सब से गुजरने में मदद की! –

0

मुझे लगता है कि आप अपनी गतिविधि में आने वाले पैरामीटर को पढ़ना चाहते हैं। इस फ़ंक्शन का उपयोग करें:

protected String getStringExtra(Bundle savedInstanceState, String id) { 
String l; 
l = (savedInstanceState == null) ? null : (String) savedInstanceState 
      .getSerializable(id); 
if (l == null) { 
    Bundle extras = getIntent().getExtras(); 
    l = extras != null ? extras.getString(id) : null; 
} 
return l; 
} 
संबंधित मुद्दे