android - Activity之间传递Map<String,Object>
迷茫
迷茫 2017-04-17 17:31:33
0
4
640

listview.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Intent it = new Intent(getActivity(), ReleaseDetail.class);
            final SerializableMap myMap = new SerializableMap();
            myMap.setMap(tempList);// 将map数据添加到封装的myMap中
            Bundle bundle = new Bundle();
            bundle.putSerializable("map1", myMap);
            it.putExtras(bundle);
            startActivity(it);
            getActivity().finish();
        }
    });

public class SerializableMap implements Serializable {

private static final long serialVersionUID = 3958588986554810147L;
private Map<String, ReleaseContents> map;

public Map<String, ReleaseContents> getMap() {
    return map;
}

public void setMap(Map<String, ReleaseContents> tempMap) {
    this.map = tempMap;
}

}

ReleaseContents是一个实体类也实现了Serializable 接口还是报以下错误呢!!!

07-12 12:51:58.093: E/AndroidRuntime(12270): java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = XXX.SerializableMap)XXX
查资料说是对象也是要先序列化接口,我ReleaseContents都实现了的呀!请问是哪里错了哦!

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(4)
黄舟

ReleaseContents クラスで使用されるクラスも Serializable インターフェースを実装する必要があります。たとえば、ReleaseContents クラスが Version クラスに属性を持っている場合、この Version クラスはSerializable インターフェイス。

例に戻ると、ReleaseContents クラスが Bitmap クラスの属性を持ち、BitmapSerializable インターフェースを実装するのではなく、Parcelable インターフェースを実装することは明らかです。

いいねを押す +0
左手右手慢动作

従来の Java シリアル化クラスの代わりに Android のシリアル化クラスを使用します。
これは Parcelable です。または、Gson ツールを使用してマップを文字列に変換し、それを渡してマップ

に解析します。
いいねを押す +0
黄舟

map にはシリアル化を実装するためのインターフェイスがないため、hashmap を試すことができます。hashmap は元々 bundle に保存することもできますし、上記のように parcelable を使用することもできます。これも速くなります。

いいねを押す +0
阿神

CacheUtil を使用してこのマップをメモリに保存します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート