उपयोगकर्ता द्वारा चुने गए आइटम की सामग्री के साथ एक नई गतिविधि खोलने के बाद मूल ListActivity
पर लौटने पर मुझे यह अपवाद मिल रहा है। यह केवल आइस क्रीम सैंडविच पर होता है।इस अपवाद उदाहरण को ट्रिगर कर रहा है: "java.lang.IllegalArgumentException: पर्यवेक्षक शून्य है।" और यह कैसे बच सकता है?
यह पता लगाने है:
java.lang.IllegalArgumentException: The observer is null.
at android.database.Observable.unregisterObserver(Observable.java:59)
at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
at android.widget.AbsListView.onDetachedFromWindow(AbsListView.java:2373)
at android.view.View.dispatchDetachedFromWindow(View.java:9756)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2274)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2272)
at android.view.ViewRootImpl.dispatchDetachedFromWindow(ViewRootImpl.java:2227)
at android.view.ViewRootImpl.doDie(ViewRootImpl.java:3679)
at android.view.ViewRootImpl.die(ViewRootImpl.java:3667)
at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:320)
at android.view.WindowManagerImpl$CompatModeWrapper.removeViewImmediate(WindowManagerImpl.java:139)
at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3144)
at android.app.ActivityThread.access$1200(ActivityThread.java:122)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1179)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
मेरी कोड में से कोई भी ढेर में बताया गया है, तो यह वास्तव में मुझे puzzling है और मैं घटना एक गंदा पकड़ नहीं कर सकता: मैं एक दर्ज की कर रहा हूँ/
गुमनाम DataSetObserver
केवल तभी जब गतिविधि बनाई जाती है। इसके अलावा गतिविधि को एक गतिविधि समूह के अंदर एम्बेड किया गया है (जिसे 4.0 में बहिष्कृत किया गया है लेकिन अभी भी इसे अनुरक्षित करना चाहिए, मैं उम्मीद कर रहा था)।
क्या किसी को भी नए ओएस के साथ यह समस्या है?
अग्रिम धन्यवाद।
अद्यतन:
ठीक है, लगता है, हालांकि यकीन नहीं है कि यह कैसे हल करने के लिए मैं समस्या के स्रोत मिल गया।
AbsListView.onDetachedFromWindow()
अंदर हम इस राशि:
if (mAdapter != null) { // Android code added on ICS
mAdapter.unregisterDataSetObserver(mDataSetObserver);
mDataSetObserver = null;
}
कौन सा, एक बार पर्यवेक्षक अपंजीकृत है, यह निरस्त माना जाता है। समस्या यह है कि, किसी कारण से, आईसीएस में इसे दो बार बुलाया जाता है। मुझे लगता है कि यह एक हटाने आपरेशन अंदर अशक्त मापदंडों के लिए जाँच करने के लिए के रूप में वे Observable
वर्ग में क्या थोड़ा पागल है:
public void unregisterObserver(T observer) { // Android code
if (observer == null) {
throw new IllegalArgumentException("The observer is null.");
}
synchronized(mObservers) {
int index = mObservers.indexOf(observer);
if (index == -1) {
throw new IllegalStateException("Observer " + observer + " was not registered.");
}
mObservers.remove(index);
}
}
क्यों वे सिर्फ इसे अनदेखा नहीं है ¬¬ वे सिर्फ ऐसा कर सकता है और काम करेगा साथ ही (या बेहतर):
public void unregisterObserver(T observer) { // Android code
synchronized(mObservers) {
mObservers.remove(observer);
}
}
क्या आप अपना गतिविधि कोड पोस्ट कर सकते हैं और जब आप कहें कि वापस लौटने का मतलब है कि बैक बटन दबाकर? – zode64
हाँ, लौटने से मेरा मतलब है कि बैक बटन दबाकर। गतिविधि के लिए कोड यहां दिया गया है (http://pastebin.com/68BzJcc1), लेकिन जैसा कि मैंने उल्लेख किया है, स्टैक में मेरे कोड में से कोई भी नहीं दिखाया गया है। – pablisco
मैंने एक बग रिपोर्ट भर दी है: http://code.google.com/p/android/issues/detail?id=22946 हालांकि समाधान होना चाहिए: / – pablisco