Intent中的TreeMap变成了HashMap

TreeMap in Intent becomes HashMap

我想通过 Intent 从一个 activity 传递一个 TreeMap 到另一个 activity。但不知何故 Android 将其转换为 HashMap 在途中。

在具有两个空白活动的新创建的项目中,运行 MainActivity 在模拟器中生成 java.lang.ClassCastException: java.util.HashMap cannot be cast to java.util.TreeMap.

第一个activity:

import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import java.util.TreeMap;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent i = new Intent(this, SecondActivity.class);
        i.putExtra("map", new TreeMap<Long, Long>());
        //TreeMap<Long, Long> m = (TreeMap<Long, Long>) i.getSerializableExtra("map");
        startActivity(i);
    }

}

第二个activity:

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import java.util.TreeMap;


public class SecondActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        TreeMap<Long, Long> m = (TreeMap<Long, Long>) getIntent().getSerializableExtra("map");
    }

}

奇怪的是,第一个 activity 中的注释代码运行没有任何问题。

正如 pbabcdefp 在他上面的评论中提到的,问题的原因描述为 here. A more detailed explanation can be found in this blog post

一个易于实施的解决方案是 using Gson