8

あなたの助けが必要です。何が起こっているのか理解できません。

2 つのアクティビティ間で TreeMap を送信しようとしています。コードは次のようになります。

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

これは私に戻ります HashMap は TreeMap にキャストできません。何

4

3 に答える 3

3

@Javeの提案に代わるものとして、データ構造を にする必要がある場合は、TreeMapデータソースとして別のマップを取る適切なコンストラクターを使用してください。したがって、受信側 ( Two) では次のようにします。

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

Mapただし、プロジェクトによっては、正確な実装について心配する必要がない場合があります。代わりに、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");
    }
}
于 2012-12-19T20:30:10.267 に答える
1

HashMap にシリアル化されているように聞こえますが、それが得られます。HashMap で解決する必要があると思います。または、独自のヘルパー クラスを作成して Parcelable を実装し、キー/文字列を順番にシリアル化することもできます。

于 2012-12-19T20:05:41.173 に答える
0

結果を に直接キャストする代わりにTreeMap、新しい を作成して - メソッドをTreeMap<String, String>使用できますputAll()

TreeMap<String, String> myMap = new TreeMap<String, String>;
HashMap<String, String> receivedMap = getIntent().getExtras().get("map");
myMap.putAll(receivedMap);
于 2012-12-19T20:13:20.543 に答える