इसके साथ भेजने का android.os.Message
उपयोग करता है Bundle
SendMessage-Method। इसलिए, क्या HashMap
अंदर डालना संभव है Bundle
?
इसके साथ भेजने का android.os.Message
उपयोग करता है Bundle
SendMessage-Method। इसलिए, क्या HashMap
अंदर डालना संभव है Bundle
?
जवाबों:
इस प्रकार प्रयास करें:
Bundle extras = new Bundle();
extras.putSerializable("HashMap",hashMap);
intent.putExtras(extras);
और दूसरी गतिविधि में
Bundle bundle = this.getIntent().getExtras();
if(bundle != null) {
hashMap = bundle.getSerializable("HashMap");
}
क्योंकि हाशम डिफ़ॉल्ट रूप से लागू होता है, Serializable
इसलिए आप इसे putSerializable
बंडल में उपयोग करके पास कर सकते हैं और अन्य गतिविधि में उपयोग कर सकते हैंgetSerializable
कृपया ध्यान दें: यदि आप एक AppCompatActivity का उपयोग कर रहे हैं, तो आपको protected void onSaveInstanceState(Bundle outState) {}
( NOT public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {}
) विधि को कॉल करना होगा
।
उदाहरण कोड ...
मानचित्र संग्रहीत करें:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putSerializable("leftMaxima", leftMaxima);
outState.putSerializable("rightMaxima", rightMaxima);
}
और इसे onCreate में प्राप्त करें:
if (savedInstanceState != null) {
leftMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("leftMaxima");
rightMaxima = (HashMap<Long, Float>) savedInstanceState.getSerializable("rightMaxima");
}
क्षमा करें यदि यह किसी प्रकार का डुप्लिकेट उत्तर है - तो शायद किसी को यह उपयोगी लगेगा। :)
यदि आप बंडल में सभी कुंजी भेजना चाहते हैं, तो आप कोशिश कर सकते हैं
for(String key: map.keySet()){
bundle.putStringExtra(key, map.get(key));
}
public static Bundle mapToBundle(Map<String, Object> data) throws Exception {
Bundle bundle = new Bundle();
for (Map.Entry<String, Object> entry : data.entrySet()) {
if (entry.getValue() instanceof String)
bundle.putString(entry.getKey(), (String) entry.getValue());
else if (entry.getValue() instanceof Double) {
bundle.putDouble(entry.getKey(), ((Double) entry.getValue()));
} else if (entry.getValue() instanceof Integer) {
bundle.putInt(entry.getKey(), (Integer) entry.getValue());
} else if (entry.getValue() instanceof Float) {
bundle.putFloat(entry.getKey(), ((Float) entry.getValue()));
}
}
return bundle;
}
मैं पार्सल के अपने कोटलिन कार्यान्वयन का उपयोग कर रहा हूं ताकि इसे प्राप्त किया जा सके और अब तक यह मेरे लिए काम करता है। यह उपयोगी है अगर आप भारी सीरियल से बचना चाहते हैं।
इसके अलावा काम करने के लिए, मैं इसे इनका उपयोग करने की सलाह देता हूं
घोषणा
class ParcelableMap<K,V>(val map: MutableMap<K,V>) : Parcelable {
constructor(parcel: Parcel) : this(parcel.readMap(LinkedHashMap<K,V>()))
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeMap(map)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<ParcelableMap<Any?,Any?>> {
@JvmStatic
override fun createFromParcel(parcel: Parcel): ParcelableMap<Any?,Any?> {
return ParcelableMap(parcel)
}
@JvmStatic
override fun newArray(size: Int): Array<ParcelableMap<Any?,Any?>?> {
return arrayOfNulls(size)
}
}
}
उपयोग
लिखो
val map = LinkedHashMap<Int, String>()
val wrap = ParcelableMap<Int,String>(map)
Bundle().putParcelable("your_key", wrap)
पढ़ना
val bundle = fragment.arguments ?: Bundle()
val wrap = bundle.getParcelable<ParcelableMap<Int,String>>("your_key")
val map = wrap.map
यह मत भूलो कि यदि आपके नक्शे K,V
को डिफ़ॉल्ट रूप से पार्सल नहीं किया गया है तो उन्हें लागू करना होगाParcelable