क्लासकास्ट एक्सेप्शन ऑनरस्टोरस्टेशनस्टेट() में वेक्टर को पुनर्स्थापित करने के लिए यादृच्छिक रूप से होता है। आम तौर पर वेक्टर को बहाल करना ठीक हो गया है, लेकिन कभी-कभी अपवाद होता है।ClassCastException ऑनस्टोर इंस्टेंसस्टेट
मैं इसे तब होता है जब गतिविधि पृष्ठभूमि के पास गया और नष्ट हो जाता है लगता है, लेकिन मुझे यकीन है कि नहीं हूँ।
कोई भी विचार? धन्यवाद।
Stack<LocationInfo> mLocationInfoVector;
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putSerializable("locationInfos", mLocationInfoVector);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
if (savedInstanceState.getSerializable("locationInfos") != null) {
@SuppressWarnings("unchecked")
mLocationInfoVector= (Stack<LocationInfo>) savedInstanceState.getSerializable("locationInfos");
}
super.onRestoreInstanceState(savedInstanceState);
}
जोड़ा:
मैं अपवाद लॉग संलग्न करने के लिए भूल गया था। कि
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.util.Stack
मेरा सुझाव है कि आप अपनी 'onRestoreInstanceState' विधि को निम्नानुसार लिखते हैं:' ऑब्जेक्ट सेव किया गया = savedInstanceState.getSerializable ("locationInfos"); अगर (स्टैक सहेजा गया उदाहरण) {mLocationInfoVector = (स्टैक) सहेजा गया; } और अगर (सहेजा गया! = शून्य) {Log.e ("RestoreBug", "पुनर्स्थापित ऑब्जेक्ट क्लास:" + saved.getClass()। getName()); } 'फिर आप कम से कम देख सकते हैं कि आप क्या प्राप्त कर रहे हैं। (एक टिप्पणी में कोड पोस्ट करने के लिए खेद है; मैं इसे एक उत्तर के रूप में पोस्ट नहीं करना चाहता)। –
मैंने इस तरह सोचा, लेकिन मैं वास्तव में जानना चाहता हूं कि इस मामले में कौन सी तंत्र है। मैंने अपवाद लॉग जोड़ा और मुझे नहीं पता कि ऑब्जेक्ट प्रकार ArrayList में क्यों बदला जाता है। – chris
किसी भी मौके से आपकी गतिविधि superclass 'SSaveInstanceState' ओवरराइड करता है? मैं सोच रहा हूं कि क्या आप अपने कोड में कहीं और 'स्थान इन्फोस' 'कुंजी का उपयोग कर रहे हैं। (किसी भी घटना में पी एस, तुम इतना है कि यह केवल कॉल अपने 'onRestoreInstanceState' कोड पुनर्निर्माण चाहिए' getSerializable() 'एक बार।) –