2012-12-19 18 views
7

Potrzebuję twojej pomocy, nie mogę zrozumieć, co się dzieje?putExtra treeMap zwraca HashMap nie może być rzutowany na TreeMap android

Próbuję wysłać TreeMap między 2 działalności, kod jest coś takiego:

class One extends Activity{ 
public void send(){ 
    Intent intent = new Intent(One.this, Two.class); 
    TreeMap<String, String> map = new TreeMap<String, String>(); 
    map.put("1","something"); 
    intent.putExtra("map", map); 
    startActivity(intent); 
    finish(); 
} 
} 

class Two extends Activity{ 
    public void get(){ 
    (TreeMap<String, String>) getIntent().getExtras().get("map");//Here is the problem 
    } 
} 

To powraca do mnie HashMap nie mogą być oddane do TreeMap. Co to jest

+0

Do krwawych szczegółów, co się dzieje, zobaczyć moją odpowiedź tutaj: http://stackoverflow.com/questions/12300886/linkedlist-put-into -intent-extra-gets-recast-to-arraylist-when-retrieve-in-nex/12305459 # 12305459 –

Odpowiedz

2

Jako alternatywę do @ sugestie Jave, o ile naprawdę potrzebujesz strukturę danych będzie a TreeMap, wystarczy użyć odpowiedniego konstruktora, który pobiera inną mapę jako źródło danych. Tak na końcu odbiorczym (Two) zrobić coś takiego:

public class Two extends Activity { 
    @Override public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     TreeMap<String, String> map = new TreeMap<String, String>((Map<String, String>) getIntent().getExtras().get("map")); 
    } 
} 

Jednak, w zależności od projektu, to prawdopodobnie nie trzeba się martwić o dokładnym Map realizacji. Więc zamiast, można po prostu oddanych do interfejsu Map:

public class Two extends Activity { 
    @Override public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Map<String, String> map = (Map<String, String>) getIntent().getExtras().get("map"); 
    } 
} 
1

Wygląda na to, że serializuje się do HashMap i właśnie to dostajesz. Zgadnij, że będziesz musiał zadowolić się HashMap. Alternatywnie możesz stworzyć własną klasę pomocniczą i zaimplementować Parcelable, a następnie serializować klucz/łańcuchy w kolejności.

+0

Gdy umieścisz coś, co implementuje interfejs 'Map' w' Bundle', to wychodzi jako HashMap. To samo z 'List' - zawsze dostajesz' ArrayList'. Zobacz http://stackoverflow.com/questions/12300886/linkedlist-put-into-intent-extra-gets-recast-to-arraylist-when-retrieving-in-nex/12305459#12305459 –

+0

Fajnie, dziękuję za wyjaśnienie, Podejrzewałem coś podobnego. Dobrze jest wiedzieć, że obsługiwana jest zwykła HashMap. – dmon

0

Zamiast odlewania wynik bezpośrednio do TreeMap, można utworzyć nowy TreeMap<String, String> i użyć putAll() metoda:

TreeMap<String, String> myMap = new TreeMap<String, String>; 
HashMap<String, String> receivedMap = getIntent().getExtras().get("map"); 
myMap.putAll(receivedMap); 
Powiązane problemy