Bundle中的Android HashMap?

Mar*_*per 81 android dictionary bundle

android.os.Message使用Bundle发送与它的sendMessage法.因此,有可能把HashMap一个Bundle

ρяσ*_*я K 153

试着:

Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
Run Code Online (Sandbox Code Playgroud)

并在第二个活动中

Bundle bundle = this.getIntent().getExtras();

if(bundle != null) {
   hashMap = bundle.getSerializable("HashMap");
}
Run Code Online (Sandbox Code Playgroud)

因为Hashmap 默认实现,Serializable所以你可以使用putSerializableBundle 传递它并使用其他活动getSerializable

  • 如果遇到问题,请确保使用的是HashMap而不是Map (3认同)
  • 这会产生关于未经检查的强制转换的警告.这是安全的吗? (3认同)
  • 您可能想通过以下方式将返回的可序列化对象转换为 hashmap (HashMap<String, Integer>) (2认同)

AMe*_*rle 12

根据文档,Hashmap实现Serializable,所以你可以putSerializable猜.你试过吗?


Mar*_*fer 6

请注意:如果使用的是AppCompatActivity,则必须调用 protected void onSaveInstanceState(Bundle outState) {}NOT public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {})方法。

示例代码...

储存地图:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("leftMaxima", leftMaxima);
    outState.putSerializable("rightMaxima", rightMaxima);
}
Run Code Online (Sandbox Code Playgroud)

并在onCreate中接收它:

if (savedInstanceState != null) {
    leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
    rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
Run Code Online (Sandbox Code Playgroud)

抱歉,如果答案重复,也许有人会觉得有用。:)


Kap*_*ats 5

如果您想发送捆绑包中的所有密钥,您可以尝试

for(String key: map.keySet()){
    bundle.putStringExtra(key, map.get(key));
}
Run Code Online (Sandbox Code Playgroud)