在android中安全地反序列化LinkedHashMap

时间:2014-12-11 13:43:02

标签: android casting classcastexception type-safety linkedhashmap

我有一个LinkedHashMap,我想通过Bundle savedInstanceBundle来将它存储在屏幕旋转之间。我该如何安全地做到这一点?在我发布它之前,因为我知道我投入了什么以及我从中得到了什么,但这确实产生了一个警告,它被认为是一个不安全的演员。

我现在在做什么:

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        if(thumbnails != null) {
            savedInstanceState.putSerializable("thumbnails", thumbnails);
        }
    }

并检索它

thumbnails = (LinkedHashMap<Long, Bitmap>)savedInstanceState.getSerializable("thumbnails");

从Bundle反序列化LinkedHashMaps的正确方法是什么?它可以完成吗?如果没有,我如何保留订单而不在其间添加另一个层来跟踪位置,这将涉及更改大量现有代码?

` Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.LinkedHashMap`

1 个答案:

答案 0 :(得分:2)

MVC 模型 - 视图 - 控制器)的角度来看,Activity控制器。 (同样是Fragment。) View 是由您重用的XML和Android View子类构成的(人们很少定义自定义View子类) 。 模型是 - 好吧,你必须自己为 Model 定义一个类!如果您有模型,那么您可以从不同的角度看待它。

但是,如果您仍想将数据从一个Activity化身传递到另一个,那么,为什么不使用JSONObject / JSONArray?这是一种矫枉过正,它会很慢,但至少应该有效。

另一种可能性是将LinkedHashMap转换为键值对列表,然后从该列表中重构它。