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

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 인터페이스를 구현한다는 것이 분명합니다.

左手右手慢动作

기존 자바 직렬화 클래스 대신 안드로이드의 직렬화 클래스를 사용하세요
이것을 Parcelable하세요. 또는 Gson 도구를 사용하여 지도를 문자열로 변환한 다음 이를 전달하고 지도로 구문 분석합니다

黄舟

map에는 직렬화를 구현할 수 있는 인터페이스가 없으므로 hashmap을 사용해 볼 수 있습니다. hashmap은 원래 bundle에 저장되거나 위와 같이 parcelable을 사용할 수 있습니다. 또한 더 빠릅니다.

阿神

CacheUtil을 사용하여 이 지도를 메모리에 저장하세요

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿