Bam*_*Bam 1 java android parcelable
所以我对这个问题感到很疯狂.
重点如下:
我有一个Object实现Parcelable.这个对象Activities很容易在没有问题的情况下传递.
但是如果我尝试从Bundlein中读取它onRestoreInstanceState,在存储之后onSaveInstanceState,我得到一个关于转换为无效类的异常.下面是存储和读取的代码,以及Exception抛出的代码.
onSaveInstanceState
Log.d(TAG, "Address is null:" + (userAddress == null));
if( userAddress != null )
{
Log.d(TAG, "Address class:" + userAddress.getClass());
}
saveInto.putParcelable("UserAddress", userAddress); <-- Storing here
Run Code Online (Sandbox Code Playgroud)
onRestoreInstanceState
Log.d(TAG, "Contains: " + retrieveFrom.keySet().contains("UserAddress"));
userAddress = retrieveFrom.getParcelable("UserAddress"); <-- Reading here
Log.e(TAG, "Loaded-Address was null:" + (userAddress == null));
Run Code Online (Sandbox Code Playgroud)
Exception
W/Bundle? Key UserAddress expected Parcelable but value was a java.lang.String. The default value <null> was returned.
W/Bundle? Attempt to cast generated internal exception:
java.lang.ClassCastException: java.lang.String cannot be cast to android.os.Parcelable
at android.os.Bundle.getParcelable(Bundle.java:810)
...
Run Code Online (Sandbox Code Playgroud)
日志显示在存储之前,该对象不为null且是正确的类.但是在检索之后,它是空的.
我发现了一个Android Bug,它提到了类似的内容,但并不完全是这样:
https
://code.google.com/p/android/issues/detail?id = 38303
对象不包含除Strings和Primitive数据之外的任何内容多头.
任何想法或建议都非常感谢.
关键
UserAddress预期,Parcelable但价值是java.lang.String.
这表明Bundle包含一个 String
原因是你打电话的地方
saveInto.putString("UserAddress", "something");
Run Code Online (Sandbox Code Playgroud)
并覆盖您尝试保存到Bundle中的其他值.
我建议使用更具体的密钥,并在单独的配置文件中声明它们,这样您就可以一目了然地看到谁使用它们.
| 归档时间: |
|
| 查看次数: |
5503 次 |
| 最近记录: |