java - हाशमप को एंड्रॉइड पर स्टोर करने के लिए कैसे करें कि जब साझा करने की वरीयताओं का उपयोग करते हुए एप्लिकेशन पुनरारंभ होता है तो इसका पुन: उपयोग किया जा सकता है?




android hashmap (4)

मैं hashmap को मेरे एंड्रॉइड एप्लिकेशन पर संग्रहीत करना चाहता हूं जो कि पुनरारंभ करते समय, हैशप के अंतिम सहेजे गए मान दिखाता है

HashMap<Integer,String> HtKpi=new HashMap<Integer,String>(); 

मेरा हैशप है और 44 मान गतिशील रूप से इसमें जमा किए जाते हैं I यह ठीक काम करता है !!! अब, मैं इसे भविष्य के उपयोग के लिए स्टोर करना चाहता हूं (एप्लिकेशन पुनरारंभ या पुन: उपयोग)।

https://code.i-harness.com


आप इसे json पर क्रमबद्ध कर सकते हैं और वरीयताओं में परिणामी स्ट्रिंग को स्टोर कर सकते हैं। तब जब एप्लिकेशन को पुनरारंभ करने से वरीयताओं से स्ट्रिंग मिलती है और उसे डिसेरीलाइज़ कर दिया जाता है

संपादित करें:

ऐसा करने के लिए आप उदाहरण के लिए Google Gson का उपयोग कर सकते हैं।

आपको अपने मैप को कक्षा में लपेटने की आवश्यकता होगी:

public class MapWrapper {
  private HashMap<Integer, String> myMap;
  // getter and setter for 'myMap'
}

मानचित्र को स्टोर करने के लिए:

Gson gson = new Gson();
MapWrapper wrapper = new MapWrapper();
wrapper.setMyMap(HtKpi);
String serializedMap = gson.toJson(wrapper);
// add 'serializedMap' to preferences

नक्शे को पुनः प्राप्त करने के लिए:

String wrapperStr = preferences.getString(yourKey);
MapWrapper wrapper = gson.fromJson(wrapperStr, MapWrapper.class);
HashMap<Integer, String> HtKpi = wrapper.getMyMap(); 

मेरे पास एक समाधान है उसी तरह मैंने अपने आवेदन में ऐसा किया था, जहां मैं राज्यों के नाम को कुंजी और राज्य के संक्षिप्त नाम के रूप में मूल्य के रूप में संग्रहित करना चाहता था। इसके लिए "res / values ​​/ string.xml" में एक स्ट्रिंग सरणी की घोषणा की सरणी को घोषित करने के लिए यहां कोड दिया गया है:

 <string-array name="array_string">
    <item>yourKey1;yourValue1</item>
    <item>yourKey2;yourValue2</item>
    <item>yourKey3;yourValue3</item>
</string-array>

और उसके बाद, जहां आप अपने हैमपप को इन्स्तांत करना चाहते हैं, ऐसा करें:

HashMap<String, String> map = new HashMap<String, String>();
    Resources res = getResources();

    String[] stringArray = res.getStringArray(R.array.array_string);

    //R.array.array_string is the name of your array declared in string.xml
    if(stringArray == null || stringArray.length == 0) return;

    for(String string : stringArray) {
        String[] splittedString = string.split(";");
        if(splittedString.length > 0) {
            String key = splittedString[0];
            String value = splittedString[1];
            map.put(key, value);
        }
    }

अब आपके पास अपने HaspMap उदाहरण उपयोग के लिए तैयार है। यह ऐसा करने का एक आसान तरीका है जो मुझे पसंद है


इसे क्रमबद्ध करें और साझा प्राथमिकताओं में या फ़ाइल में सहेजें। चाहे आप यह कर सकते हैं, ज़ाहिर है, डेटा प्रकारों पर निर्भर करता है और इस पर मैप किया जाता है। (यह काम नहीं करेगा, उदाहरण के लिए, यदि आप किसी दृश्य को सीरियल करना चाहते हैं।)

उदाहरण:

//persist
HashMap<String, Integer> counters; //the hashmap you want to save
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();    
for (String s : counters.keySet()) {
    editor.putInteger(s, counters.get(s));
}
editor.commit();


//load
SharedPreferences pref = getContext().getSharedPreferences("Your_Shared_Prefs", Context.MODE_PRIVATE);
HashMap<String, Integer> map= (HashMap<String, Integer>) pref.getAll();
for (String s : map.keySet()) {
        Integer value=map.get(s);
        //Use Value
}

राघव के प्रयोग से मैंने एक पूर्ण काम उदाहरण बनाया:

public class AppCache {
public static HashMap<String, String> hashMap = null;

/* REPOSITORY NAME */
public static final String REPOSITORY_NAME = "HMIAndroid_System_Settings";

/* SETTINGS */
public static final String SETTING_PLANNED = "DATA_PLANNED";
public static final String SETTING_ACTUAL = "DATA_ACTUAL";
public static final String SETTING_ETA = "DATA_ETA";
public static final String SETTING_OR = "DATA_OR";
public static final String SETTING_LINEID = "LINEID";
public static final String SETTING_SERVERIP = "SERVERIP";

public static void LoadSettings(Context context) {
    SharedPreferences pref = context.getSharedPreferences(REPOSITORY_NAME, Context.MODE_PRIVATE);
    hashMap = (HashMap<String, String>) pref.getAll();
    if(hashMap == null) {
        hashMap = new HashMap<String, String>();
    }
}

public static void SaveSettings(Context context) {
    if(hashMap == null) {
        hashMap = new HashMap<String, String>();
    }

    //persist
    SharedPreferences pref = context.getSharedPreferences(REPOSITORY_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = pref.edit();
    for (String s : hashMap.keySet()) {
        editor.putString(s, hashMap.get(s));
    }
    editor.commit();
}
}

फिर अपने ऑन क्रेट में इसे लोड करें:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //load settings
    AppCache.LoadSettings(getApplicationContext());
    Log.d("onCreate","My LineID=" + AppCache.hashMap.get(AppCache.SETTING_LINEID));
    Log.d("onCreate","Dest ServerIP=" + AppCache.hashMap.get(AppCache.SETTING_SERVERIP));
}

अपने ऐप अपडेट सेटिंग्स में कहीं भी कहीं भी:

AppCache.hashMap.put(AppCache.SETTING_LINEID, "1");
AppCache.hashMap.put(AppCache.SETTING_SERVERIP, "192.168.1.10");

अपने ऑनडास्टॉय में सेटिंग्स को कैश में सहेजें:

@Override
protected  void onDestroy() {
    //save settings
    AppCache.SaveSettings(getApplicationContext());
}




sharedpreferences