Android如何在活动之间传递LinkedHashMap?

我想在活动之间传递LinkedHashMap,我的代码是这样的

活动A

LinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>(); // setting data in map Bundle bundle = new Bundle(); bundle.putSerializable("OBJECTS_LINKED_HASHMAP", mLinkedHashMap); Intent intent = new Intent(this, ActivityB.class); intent.putExtras(bundle); startActivity(intent); 

在活动时收到捆绑对象我收到“类转换exception”错误消息

活动B

 Bundle bundle = this.getIntent().getExtras(); LinkedHashMap mLinkedHashMap = new LinkedHashMap<String, Object>(); mLinkedHashMap = (LinkedHashMap<String, Object>) bundle.getSerializable("OBJECTS_LINKED_HASHMAP"); 

获得class级转换例外

 ClassCastException: java.util.HashMap cannot be cast to LinkedHashMap 

我已经检查了文档LinkedHashMap也实现了Serializable接口。

我正在使用LinkedHashMap,因为我想维护对象的顺序,他们插入的方式,我想回来的顺序。

如何在活动之间传递LinkedHashMap?

Solutions Collecting From Web of "Android如何在活动之间传递LinkedHashMap?"

尝试GSON的变化:)

从这个链接下载gson.jar

在你的项目中添加gson-2.2.2.jar文件。
现在使用GSON将您的LinkedHashMap传递给另一个活动

像这样(根据您的需要修改下面的代码):

主要活动:::

 public class MainActivity extends Activity { ObjectClass obj=new ObjectClass(); LinkedHashMap<String, ObjectClass> mLinkedHashMap = new LinkedHashMap<String, ObjectClass>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); obj.id=1; obj.name="hello"; mLinkedHashMap.put("test", obj); Gson gson = new Gson(); String list = gson.toJson(mLinkedHashMap); Intent intent = new Intent(this, secondActivity.class); intent.putExtra("list", list); startActivity(intent); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

secondActivity :::

 public class secondActivity extends Activity { LinkedHashMap<String, ObjectClass> mLinkedHashMap = new LinkedHashMap<String, ObjectClass>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); String str= getIntent().getStringExtra("list"); Gson gson = new Gson(); Type entityType = new TypeToken< LinkedHashMap<String, ObjectClass>>(){}.getType(); mLinkedHashMap = gson.fromJson(str, entityType); ObjectClass obj = mLinkedHashMap.get("test"); Log.i("list", ""+obj.id); } } 

为我工作。 希望这会有所帮助。

这是我的对象类供参考。

 public class ObjectClass { public int id; public String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

如何添加gson-2.2.2.jar文件。

1)从下载的文件夹“google-gson-2.2.2”中拷贝你的gson-2.2.2.jar。
2)将其粘贴到您的项目的资产文件夹。
3)现在通过右键单击您的项目>构buildpath>configuration构buildpath,转到您的项目构buildpath。
4)打开一个对话框,从右侧菜单中selectjava build path,然后转到库标签
点击“Add Jars …”button,如下图所示
它会打开另一个对话框来添加jar。 这里select我们添加到项目的资源文件夹中的gson-2.2.2.jar(步骤2)。
它会将jar添加到您的项目中(我已经将它添加到了我的项目中,如下图所示)

在这里输入图像说明 5)现在select订单和导出标签,并select你的gson-2.2.2.jar(见下图)。
在这里输入图像说明 6)按OK,现在你可以在你的项目中使用GSON

LinkedHashMap <>不可Parcelable或Serializable

编辑:

检查这个:

序列化/反序列化LinkedHashMap(android)java

编辑:

基于Manish Android提供的链接,解决scheme是

  if (getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP") != null) HashMap<?, ?> user_info = (HashMap<?, ?>) getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP"); LinkedHashMap<String, Object> userdata= (LinkedHashMap<String, Object>) user_info 

你需要得到这样的

 if (getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP") != null) LinkedHashMap<String, Object> user_info = (LinkedHashMap<String, Object>) getIntent().getSerializableExtra("OBJECTS_LINKED_HASHMAP"); 

作为字节数组传递,然后反序列化并转换为目标Activity中的LinkedHashMap