2012-12-19 14 views
7

Ho bisogno del tuo aiuto, non riesco a capire cosa sta succedendo?putExtra treeMap restituisce che HashMap non può essere lanciato su TreeMap android

Sto cercando di inviare un TreeMap tra 2 attività, il codice è qualcosa di simile:

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

Questa operazione riporta a me HashMap non può essere gettato a TreeMap. Cosa

+0

Per i dettagli cruenti di ciò che sta accadendo, vedere la mia risposta qui: http://stackoverflow.com/questions/12300886/linkedlist-put-into -intenzione-extra-ottiene-rifusione-a-arrailista-quando-recupera-in-nex/12305459 # 12305459 –

risposta

2

In alternativa al @ suggerimenti di Jave, se si ha realmente bisogno la struttura di dati per essere a TreeMap, basta usare il costruttore appropriato che prende un'altra mappa come origine dati. Quindi, sul lato di ricezione (Two) fare qualcosa di simile:

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

Tuttavia, a seconda del progetto, probabilmente non c'è bisogno di preoccuparsi per l'esatto Map implementazione. Quindi, in vece, si può solo lanciare l'interfaccia 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

Sembra che si serializzi su una HashMap e questo è quello che stai ottenendo. Suppongo che dovrai accontentarti di una HashMap. In alternativa puoi creare la tua classe di helper e implementare Parcelable, quindi serializzare la chiave/stringhe in ordine.

+0

Quando si inserisce qualcosa che implementa l'interfaccia 'Mappa' in un' Bundle', viene visualizzato come HashMap. Lo stesso vale per 'List' - ottieni sempre un' ArrayList'. Vedi http://stackoverflow.com/questions/12300886/linkedlist-put-into-intent-extra-gets-recast-to-arraylist-when-retrieving-in-nex/12305459#12305459 –

+0

Cool, grazie per la spiegazione, Sospettavo qualcosa in questo senso. È bello sapere che è supportata una HashMap semplice. – dmon

0

Invece di lanciare il risultato direttamente ad un TreeMap, è possibile creare un nuovo TreeMap<String, String> e utilizzare il putAll() -Metodo:

TreeMap<String, String> myMap = new TreeMap<String, String>; 
HashMap<String, String> receivedMap = getIntent().getExtras().get("map"); 
myMap.putAll(receivedMap); 
Problemi correlati