我收到了这个错误: -
java.lang.RuntimeException: Parcel android.os.Parcel@41a2f780: Unmarshalling unknown type code 30 at offset 8804
即使我在我的Android应用中完成了此解决方案:https://stackoverflow.com/a/21380449/2492278。
这可能是一个重复的问题,但我已经通过各种解决方案提出:
1。)更改proguard conf文件。
2.)检查对相同数据类型执行读写解析操作。
来自各种线程的许多其他解决方案,但这并不能解决我的问题。
主要是,有没有人知道未知类型代码xxxx和偏移yyyy的含义。我的意思是这两个值到底意味着什么?
更新: -
我正在滚动代码,我发现此异常基本上是从属于readValue()
的{{1}}函数抛出的,该函数接受android.os.Parcel
类的loader
对象。
ClassLoader
所以这意味着,如果在某些情况下public final Object readValue(ClassLoader loader) {
int type = readInt();
switch (type) {
case VAL_NULL:
return null;
case VAL_STRING:
return readString();
case VAL_INTEGER:
return readInt();
case VAL_MAP:
return readHashMap(loader);
case VAL_PARCELABLE:
return readParcelable(loader);
case VAL_SHORT:
return (short) readInt();
case VAL_LONG:
return readLong();
case VAL_FLOAT:
return readFloat();
case VAL_DOUBLE:
return readDouble();
case VAL_BOOLEAN:
return readInt() == 1;
case VAL_CHARSEQUENCE:
return readCharSequence();
case VAL_LIST:
return readArrayList(loader);
case VAL_BOOLEANARRAY:
return createBooleanArray();
case VAL_BYTEARRAY:
return createByteArray();
case VAL_STRINGARRAY:
return readStringArray();
case VAL_CHARSEQUENCEARRAY:
return readCharSequenceArray();
case VAL_IBINDER:
return readStrongBinder();
case VAL_OBJECTARRAY:
return readArray(loader);
case VAL_INTARRAY:
return createIntArray();
case VAL_LONGARRAY:
return createLongArray();
case VAL_BYTE:
return readByte();
case VAL_SERIALIZABLE:
return readSerializable(loader);
case VAL_PARCELABLEARRAY:
return readParcelableArray(loader);
case VAL_SPARSEARRAY:
return readSparseArray(loader);
case VAL_SPARSEBOOLEANARRAY:
return readSparseBooleanArray();
case VAL_BUNDLE:
return readBundle(loader); // loading will be deferred
case VAL_PERSISTABLEBUNDLE:
return readPersistableBundle(loader);
case VAL_SIZE:
return readSize();
case VAL_SIZEF:
return readSizeF();
default:
int off = dataPosition() - 4;
throw new RuntimeException(
"Parcel " + this + ": Unmarshalling unknown type code " + type + " at offset " + off);
}
}
没有匹配,那么代码会进入type
。
另外我知道如果default
来自 null ,那么代码将进入默认值。
所以,这意味着函数开头的某种方式loader
与它们相区别,在同一个Parcel类中声明: -
readInt()
在我的情况下30.所以我仍然不清楚,如前所述,如果xxxx除了声明的值之外是如何确定的呢?
答案 0 :(得分:2)
检查你的解析顺序,或者你可以使用android studio plug in。https://plugins.jetbrains.com/plugin/7332?pr=