2010-02-01 9 views
5

में त्रुटि मेरे पास Google द्वारा LunarLander उदाहरण के बाद एक एंड्रॉइड ऐप बनाया गया है। मैं इसे वास्तविक डिवाइस पर डिबग कर रहा हूं, (Motorola Droid) Android 2.0 के साथ। जब अभिविन्यास बदलता है, तो प्रोग्राम NullPointerException पर क्रैश हो जाता है। बस दुर्घटना से पहले से Logcat:"यहां कुछ गड़बड़ है, पैकेज को फिर से शुरू करने की उम्मीद नहीं थी" एंड्रॉइड लॉगक

02-01 00:24:27.956: DEBUG/nate(8358): Starting Game 
02-01 00:24:36.878: DEBUG/dalvikvm(1086): GC freed 1788 objects/92256 bytes in 1389ms 
02-01 00:24:38.542: INFO/WindowManager(1021): Setting rotation to 1, animFlags=0 
02-01 00:24:38.558: INFO/ActivityManager(1021): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34} 
02-01 00:24:38.620: WARN/UsageStats(1021): Something wrong here, didnt expect org.nifong.leeder to be resumed 
02-01 00:24:38.886: DEBUG/nate(8358): New Surface dimensions: 854x442 
02-01 00:24:38.886: DEBUG/nate(8358): flies was null 

पहली पंक्ति है कि चिंता मुझे 24:38.620 पर "Something wrong here" है। मुझे नहीं पता कि इसका क्या अर्थ है, लेकिन मुझे लगता है कि यह मेरे कारण स्क्रीन परिवर्तन में ठीक से प्रतिक्रिया नहीं दे रहा है।

अगला मुझे एक डीबग संदेश मिलता है जिसे मैंने स्वयं को अपनी सतह surfaceChanged() के भीतर से नए सतह आयामों के बारे में मुद्रित किया है।

फिर मैं मसौदा संदेश प्रिंट करता हूं कि मक्खियों null था या नहीं। flies वह फ़ील्ड है जो अंततः NullPointerException का कारण बनता है। यह एक बार बनाया गया है, और बाकी कार्यक्रम के लिए फिर से लिखा नहीं है। मुझे पता है कि यह दुर्घटना से पहले शून्य नहीं था, क्योंकि इसे कई बार पढ़ा गया था।

क्या किसी के पास कोई सुराग है कि मेरे निजी सदस्य चर इन सुरागों से कैसे शून्य हो गए?

मैं कोड शामिल करूंगा लेकिन इसमें बहुत कुछ है और मुझे नहीं पता कि प्रासंगिक क्या होगा।

उत्तर

2

मैं अपने मैनिफ़ेस्ट फ़ाइल में गतिविधि टैग करने के लिए इन दो पंक्तियों को जोड़ कर यह तय

android:configChanges="keyboardHidden|orientation" 
android:screenOrientation="landscape" 

इस का कहना है कि अपने आवेदन में अपने दम पर कीबोर्ड और उन्मुखीकरण परिवर्तन (कुछ नहीं कर रहे द्वारा) संभाल लेंगे और चलाने के लिए पसंद करते हैं परिदृश्य में हर समय।

+0

यह आपके उपयोग के मामले के आधार पर आपके ऐप के लिए एक समाधान हो सकता है। मेरे विचार में यह उपयोगकर्ता को एक उपयोग व्यवहार में मजबूर करने का एक कठोर व्यवहार है जिसे वह नापसंद कर सकता है ... – Janusz

3

एंड्रॉइड में अभिविन्यास परिवर्तन राज्य को प्रभावित करते हैं। असल में, आपकी गतिविधि नष्ट हो जाती है और फिर से बनाई जाती है। इसलिए आपको अवगत होना चाहिए कि Android lifecycle ईवेंट कहलाए जाएंगे और राज्य को कैसे बचाया जाए।

आपको static उदाहरणों से सावधान रहना होगा और यह इस जीवन चक्र को कैसे प्रभावित करेगा।

Here is a blog post इनमें से कुछ समझाते हैं।

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