2015-03-18 89 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

相關問題