putExtra treeMap returns HashMap cannot be cast to TreeMap android

前端 未结 3 1196
星月不相逢
星月不相逢 2020-12-11 04:28

I need your help, I cannot understand what\'s happening?

I\'m trying to send a TreeMap between 2 activities, the code is something like this:

class O         


        
相关标签:
3条回答
  • 2020-12-11 04:31

    As alternative to @Jave's suggestions, if you really need the data structure to be a TreeMap, just use the appropriate constructor that takes another map as data source. So on the receiving end (Two) do something like:

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

    However, depending on your project, you probably don't have to worry about the exact Map implementation. So in stead, you could just cast to the Map interface:

    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");
        }
    }
    
    0 讨论(0)
  • 2020-12-11 04:31

    Sounds like it serializes to a HashMap and that's what you're getting. Guess you're gonna have to settle for a HashMap. Alternatively you can create your own helper class and implement Parcelable, then serialize the key/strings in order.

    0 讨论(0)
  • 2020-12-11 04:47

    Instead of casting the result directly to a TreeMap, you can create a new TreeMap<String, String> and use the putAll()-method:

    TreeMap<String, String> myMap = new TreeMap<String, String>;
    HashMap<String, String> receivedMap = getIntent().getExtras().get("map");
    myMap.putAll(receivedMap);
    
    0 讨论(0)
提交回复
热议问题