我有一个主屏幕实现,我在其中存储“快捷方式”,方法是使用Parcel
它进行编组并将其存储为 Base32 字符串。
除一种情况外,编组和解组工作非常好:
如果我对 Honeycomb(或更低版本)的意图进行编组并尝试在 ICS(或更高版本)上对其进行解组,则会出现空指针异常。(反之亦然,这意味着在 ICS 上编组而在 HC 上解组也是 falis)
但是编组 - 跨 Froyo、GB 和 HC 的解组工作绝对没问题。ICS 和 JellyBean 也一样。
我正在使用 apache commons library 进行 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)
.....
我猜谷歌在 ICS 中为 Intent 添加了一些额外的属性,因此它的序列化图像与旧版本不兼容。可以有解决方法吗?