android - पार्सल अज्ञात प्रकार अज्ञात प्रकार कोड




exception unmarshalling (4)

मुझे कस्टम दृश्य के साथ इस मुद्दे को देखने का था I ViewBaseSavedState यह पता चला कि लिखोपार्सल () पद्धति में विधि को गलत क्रम में कॉल किया गया था।

इस समस्या को खोजने के लिए परेशानी हो रही थी और मुझे एंड्रॉइड एसडीके को बंडल क्लास के लिए डिबग करने की जरूरत थी, जहां यूनिसेल () को कहा जाता है:

synchronized void unparcel() {
    if (mParcelledData == null) {
        return;
    }

    int N = mParcelledData.readInt();
    if (N < 0) {
        return;
    }
    if (mMap == null) {
        mMap = new HashMap<String, Object>(N);
    }
    mParcelledData.readMapInternal(mMap, N, mClassLoader);
    mParcelledData.recycle();
    mParcelledData = null;
}

आपके लॉग की रेखा 223 बिल्कुल readMapInternal () कॉल है। वहाँ पार्सल ऑब्जेक्ट अपने आइटम के माध्यम से फिर से चलती है, मूल्य एक करके पढ़ती है समस्या आमतौर पर तब होती है जब कुछ गलत क्रम में लिखा गया था। विधि पार्सल.रेड वैल्यू (क्लास लोडर लोडर) उन्हें उस क्रम में पढ़ा जाएगा, जो लिखा गया था, लेकिन अगर आपके पास कस्टम विचार या ऑब्जेक्ट हैं, यदि वे उस ऑर्डर में लिखे गए हैं जो आप पढ़ रहे हैं, तो इससे कुछ गलत होगा आगे पढ़ें।

इसलिए मुझे आखिरी मद की पहचान करके समस्या मिली जो सफलतापूर्वक पढ़ी गई थी आप सामान्यतः इसकी पहचान कर सकते हैं (यदि यह कस्टम व्यू या ऑब्जेक्ट है) इसके निर्माता वर्ग नाम को चेक कर। पार्सल क्लास की जांच करें विधि 'पढाई योग्य निर्माता ():

public final <T extends Parcelable> Parcelable.Creator<T> readParcelableCreator(
        ClassLoader loader) {
    String name = readString();
    if (name == null) {
        return null;
    }
...
}

आप निर्माता की श्रेणी के लिए नाम स्ट्रिंग का निरीक्षण कर सकते हैं। यदि यह एक कस्टम है, तो आप तुरंत इसे पहचान सकते हैं फिर, अगर अगले पढ़ने में आपका ऐप क्रैश हो जाता है, तो आप लगभग निश्चित रूप से यह सुनिश्चित कर सकते हैं कि अपराधी पिछले पढ़ने वाला था।

आशा करता हूँ की ये काम करेगा।

हमें इस त्रुटि को प्ले स्टोर द्वारा लॉग इन क्रैश रिपोर्ट में मिल रहा है। खिचड़ी भाषा यह हमारे सभी परीक्षण में दोहराना क्या किसी और को एक ही समस्या या समाधान है? बात यह है, हम यह भी नहीं जानते हैं कि इस बग को दोहराने के लिए क्या करना है।

सभी पार्सलेट योग्य ऑब्जेक्ट्स CREATOR, writeToParcel () और संरक्षक परिभाषित हैं सभी सूचियां और जटिल प्रकार आरंभ किए जाते हैं और शून्य की जांच की जाती है।

java.lang.RuntimeException: Unable to start activity ComponentInfo{au.com.company/au.com.company.DetailsActivity}: java.lang.RuntimeException: Parcel android.os.[email protected]: Unmarshalling unknown type code 6881381 at offset 11268
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2247)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2297)
at android.app.ActivityThread.access$700(ActivityThread.java:152)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1282)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5328)
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:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Parcel android.os.[email protected]: Unmarshalling unknown type code 6881381 at offset 11268
at android.os.Parcel.readValue(Parcel.java:2032)
at android.os.Parcel.readMapInternal(Parcel.java:2225)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1240)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:861)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1104)
at android.support.v4.app.FragmentManagerImpl.moveToState(SourceFile:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(SourceFile:1872)
at android.support.v4.app.FragmentActivity.onCreate(SourceFile:215)
at android.support.v7.app.ActionBarActivity.onCreate(SourceFile:97)
at au.com.company.DetailsActivity.onCreate(SourceFile:40)
at android.app.Activity.performCreate(Activity.java:5250)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1097)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
... 11 more

मुझे पार्सल स्रोत पढ़ने से अधिक होने पर मुझे यह त्रुटि मिलती है कि रिटर्न वैल्यू की जांच के बजाय नक्शे पर सहेजने के लिए नल है:

String tag = in.readString();
Double value = in.readDouble();
while (tag != null && value != null) {
    this.observations.put(tag, value);
    tag = in.readString();
    value = in.readDouble();
};

पार्सल पर सही ढंग से पुनरावृति करने के लिए उपयोग करने के लिए एक इंट को स्टोर करना चाहिए:

int numObservations = in.readInt();
String key;
Double value;
for (int i = 0; i < numObservations; i++) {
    key = in.readString();
    value = in.readDouble();
    map.put(tag, value);
}

अपने पार्सलेट योग्य वर्गों और संबंधित उप-कक्षाओं में read और write के क्रम की जांच करें।

जिस ऑर्डर में आप writeToParcel हैं writeToParcel उसी क्रम में होना चाहिए, जैसा कि आप अपनी MyParcelable(Parcel in) विधि MyParcelable(Parcel in) पढ़ते हैं।


पार्सल पढ़ने के दौरान मुझे एक ही त्रुटि हुई

अपने पार्सलेट योग्य वर्गों और संबंधित उप-कक्षाओं को पढ़ने / लिखने के दौरान ऑर्डर और गिनती की जांच करें