2015-03-18 87 views
2

我想通过一个Intent将TreeMap从一个活动传递给另一个活动。但Android以某种方式将其转换为HashMapIntent中的TreeMap变为HashMap

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

第一项活动:

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); 
    } 

} 

次活动:

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"); 
    } 

} 

奇怪的是,在第一项活动中的注释代码运行没有任何问题。

+0

这似乎回答你的问题。 http://stackoverflow.com/questions/12300886/linkedlist-put-int-intent-extra-gets-recast-to-arraylist-when-retrieving-in-nex/12305459#12305459 – 2015-03-18 21:31:53

+0

它的确,非常感谢! – TheGuy 2015-03-18 21:43:54

回答

1

正如pbabcdefp在他上面的评论中提到的,问题的原因被描述为here。更详细的解释可以在this blog post中找到。

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

相关问题