我正在观察wrt传递可序列化数据作为intent extra的行为是非常奇怪的,我只想澄清是否有一些我不会错过的东西.
所以我试图做的是在ActivtyA我LinkedList为intent我开始下一个活动而创建一个实例- ActivityB.
LinkedList<Item> items = (some operation);
Intent intent = new Intent(this, ActivityB.class);
intent.putExtra(AppConstants.KEY_ITEMS, items);
Run Code Online (Sandbox Code Playgroud)
在onCreate中ActivityB,我试图获取LinkedList额外如下-
LinkedList<Item> items = (LinkedList<Item>) getIntent()
.getSerializableExtra(AppConstants.KEY_ITEMS);
Run Code Online (Sandbox Code Playgroud)
在运行这个时,我ClassCastException在ActivityB上面的一行中反复进入.基本上,例外说我收到了ArrayList.一旦我改变了上面的代码来接收一个代码ArrayList,一切都运行得很好.
现在我不能从现有文档中找出这是否是Android传递可序列化List实现时的预期行为.或者,或许,我正在做的事情存在根本性的错误.
谢谢.
我将TreeMap填充到intent中:
private TreeMap<Long, Long> mSelectedItems;
...
mSelectedItems = new TreeMap<Long, Long>();
...
Intent intent = new Intent();
intent.putExtra("results", mSelectedItems);
setResult(RESULT_OK, intent);
Run Code Online (Sandbox Code Playgroud)
然后尝试在调用活动中将其读回:
TreeMap<Long, Long> results = (TreeMap<Long, Long>)
data.getSerializableExtra("results");
Run Code Online (Sandbox Code Playgroud)
什么导致:
E/AndroidRuntime(26868): Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.TreeMap
Run Code Online (Sandbox Code Playgroud)
嗯,当然,但是因为我没有在代码中的任何地方使用HashMap,并且因为TreeMap实现了Serializable,所以这应该没有错误,不是吗?为什么android试图强迫我上课我不使用?