无法在ICS上解组意图

时间:2012-10-25 05:15:08

标签: android serialization android-intent marshalling unmarshalling

我有一个主屏幕实现,我通过使用Parcel对其进行marshelling来存储“快捷方式”并将其存储为Base32字符串。

除了一个场景之外,marshelling和unmarshelling工作得非常好:

如果我对Honeycomb(或更低版本)的意图进行marshell并尝试在ICS(或更高版本)上解组它,我会得到空指针异常。 (反过来也是如此,意味着对ICS进行了抨击,并且对HC也进行了抨击)

但是marshelling - 在Froyo,GB和HC之间的解密工作绝对没问题。 ICS和JellyBean之间相同。

我正在使用apache commons库进行Base32转换。 (我也试过Base64,但它也不起作用)。从Base32编码和解码字符串没有问题。

这是我的代码:

public static Intent getIntentFromBase32String(final String s)
{
    try
    {
        final Parcel p = Parcel.obtain();
        final byte[] array = new Base32(true).decode(s);
        p.unmarshall(array, 0, array.length);
        p.setDataPosition(0);
        final Intent intent = (Intent)p.readValue(Intent.class.getClassLoader());
        return intent;
    }
    catch (final Exception e)
    {
        Logger.logError(e);
    }
    return null;
}

public static String getBase32StringFromIntent(final Intent intent)
{
    try
    {
        final Parcel p = Parcel.obtain();
        p.writeValue(intent);
        final byte[] array = p.marshall();
        return new Base32(true).encodeToString(array);
    }
    catch (final Exception e)
    {
        Logger.logError(e);
    }
    return null;
}

这是堆栈跟踪:

java.lang.NullPointerException in com.myapp.myhome.loadShortcuts Message: null
    android.content.Intent.readFromParcel(Intent.java:6222)
    android.content.Intent.<init>(Intent.java:6202)
    android.content.Intent.readFromParcel(Intent.java:6229)
    android.content.Intent.<init>(Intent.java:6202)
    android.content.Intent$1.createFromParcel(Intent.java:6193)
    android.content.Intent$1.createFromParcel(Intent.java:6191)
    android.os.Parcel.readParcelable(Parcel.java:1993)
    android.os.Parcel.readValue(Parcel.java:1855)
    com.myapp.common.utils.getIntentFromBase32String(Unknown Source)
    .....

我猜Google在ICS中为Intent添加了一些额外的属性,因为它的序列化图像与旧版本不兼容。可以有一个解决方法吗?

0 个答案:

没有答案