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。
我想通过 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。