2012-12-19 9 views
7

Ich brauche Ihre Hilfe, ich kann nicht verstehen, was geschieht?putExtra TreeMap kehrt HashMap nicht auf TreeMap android gegossen werden

Ich versuche, eine TreeMap zwischen zwei Aktivitäten zu senden, ist der Code etwas wie folgt aus:

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

Dies ist für mich gibt HashMap nicht zu TreeMap gegossen werden. Was

+0

Für die blutigen Details dessen, was geschieht, siehe meine Antwort hier: http://stackoverflow.com/questions/12300886/linkedlist-put-into -intent-extra-wird-Neufassung-to-Arraylist-when-Wiederauffindungs-in-nex/12305459 # 12305459 –

Antwort

2

Als Alternative zu @ Jave Vorschläge, wenn Sie wirklich die Datenstruktur sein müssen ein TreeMap, benutzen Sie einfach den entsprechenden Konstruktor, der eine andere Karte als Datenquelle nimmt. So auf dem empfangenden Ende (Two) so etwas wie:

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

jedoch je nach Ihrem Projekt, werden Sie wahrscheinlich müssen nicht über die genaue Map Umsetzung kümmern. So anstatt, könnten Sie werfen nur auf die Map Schnittstelle:

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

Klingt wie es zu einem HashMap serialisiert und das ist, was Sie bekommen. Ich denke du musst dich mit einer HashMap begnügen. Alternativ können Sie Ihre eigene Hilfsklasse erstellen und Parcelable implementieren und dann den Schlüssel/die Strings seriell serialisieren.

+0

wenn Sie etwas setzen, das die 'Map'-Schnittstelle in einen' Bundle' implementiert, es als HashMap herauskommt. Das Gleiche gilt für 'List' - Sie erhalten immer eine'ArrayList' daraus. Siehe http://stackoverflow.com/questions/12300886/linkedlist-put-into-intent-extra-gets-recast-to-arraylist-when-retrieving-in-nex/12305459#12305459 –

+0

Cool, danke für die Erklärung, Ich vermutete etwas in dieser Richtung. Es ist gut zu wissen, dass eine einfache HashMap unterstützt wird. – dmon

0

Anstatt das Ergebnis direkt an eine TreeMap von Gießen, können Sie einen neuen TreeMap<String, String> und verwenden Sie die putAll() -Methode erstellen:

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