আমি কিভাবে রক্ষা করতে পারে HashMap করার ভাগ পছন্দসমূহ অ্যান্ড্রয়েড কি?
আমি কিভাবে রক্ষা করতে পারে HashMap করার ভাগ পছন্দসমূহ অ্যান্ড্রয়েড কি?
উত্তর:
আমি জটিল বস্তুগুলি SharedPreferences এ লেখার পরামর্শ দেব না। পরিবর্তে আমি ObjectOutputStream
অভ্যন্তরীণ স্মৃতিতে এটি লিখতে ব্যবহার করব ।
File file = new File(getDir("data", MODE_PRIVATE), "map");
ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(file));
outputStream.writeObject(map);
outputStream.flush();
outputStream.close();
আমি Gson
রূপান্তর HashMap
করতে ব্যবহার করি String
এবং তারপরে এটি সংরক্ষণ করিSharedPrefs
private void hashmaptest()
{
//create test hashmap
HashMap<String, String> testHashMap = new HashMap<String, String>();
testHashMap.put("key1", "value1");
testHashMap.put("key2", "value2");
//convert to string using gson
Gson gson = new Gson();
String hashMapString = gson.toJson(testHashMap);
//save in shared prefs
SharedPreferences prefs = getSharedPreferences("test", MODE_PRIVATE);
prefs.edit().putString("hashString", hashMapString).apply();
//get from shared prefs
String storedHashMapString = prefs.getString("hashString", "oopsDintWork");
java.lang.reflect.Type type = new TypeToken<HashMap<String, String>>(){}.getType();
HashMap<String, String> testHashMap2 = gson.fromJson(storedHashMapString, type);
//use values
String toastString = testHashMap2.get("key1") + " | " + testHashMap2.get("key2");
Toast.makeText(this, toastString, Toast.LENGTH_LONG).show();
}
অগ্রাধিকারে মানচিত্রটি সংরক্ষণ এবং মানচিত্রটি পছন্দ থেকে লোড করার জন্য আমি একটি সাধারণ কোডের টুকরো লিখেছি। কোনও জিএসএন বা জ্যাকসন ফাংশন প্রয়োজন। আমি সারণীতে কী হিসাবে স্ট্রিং এবং মান হিসাবে বুলিয়ান একটি মানচিত্র ব্যবহার করেছি।
private void saveMap(Map<String,Boolean> inputMap){
SharedPreferences pSharedPref = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
if (pSharedPref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
Editor editor = pSharedPref.edit();
editor.remove("My_map").commit();
editor.putString("My_map", jsonString);
editor.commit();
}
}
private Map<String,Boolean> loadMap(){
Map<String,Boolean> outputMap = new HashMap<String,Boolean>();
SharedPreferences pSharedPref = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString("My_map", (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String key = keysItr.next();
Boolean value = (Boolean) jsonObject.get(key);
outputMap.put(key, value);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
getApplicationContext
সাধারণ ক্লাস থেকে অ্যাক্সেস করতে পারি ?
Map<String, String> aMap = new HashMap<String, String>();
aMap.put("key1", "val1");
aMap.put("key2", "val2");
aMap.put("Key3", "val3");
SharedPreferences keyValues = getContext().getSharedPreferences("Your_Shared_Prefs"), Context.MODE_PRIVATE);
SharedPreferences.Editor keyValuesEditor = keyValues.edit();
for (String s : aMap.keySet()) {
keyValuesEditor.putString(s, aMap.get(s));
}
keyValuesEditor.commit();
ভিনোজ জন হোসানের উত্তরের স্পিন হিসাবে, আমি কোনও সিঙ্কের পরিবর্তে ডেটার কীটির উপর ভিত্তি করে আরও জেনেরিক সন্নিবেশের অনুমতি দেওয়ার জন্য উত্তরটি পরিবর্তন করেছি "My_map"
।
আমার বাস্তবায়নে, MyApp
আমার Application
ওভাররাইড শ্রেণি, এবং MyApp.getInstance()
এটি ফিরিয়ে আনার জন্য কাজ করে context
।
public static final String USERDATA = "MyVariables";
private static void saveMap(String key, Map<String,String> inputMap){
SharedPreferences pSharedPref = MyApp.getInstance().getSharedPreferences(USERDATA, Context.MODE_PRIVATE);
if (pSharedPref != null){
JSONObject jsonObject = new JSONObject(inputMap);
String jsonString = jsonObject.toString();
SharedPreferences.Editor editor = pSharedPref.edit();
editor.remove(key).commit();
editor.putString(key, jsonString);
editor.commit();
}
}
private static Map<String,String> loadMap(String key){
Map<String,String> outputMap = new HashMap<String,String>();
SharedPreferences pSharedPref = MyApp.getInstance().getSharedPreferences(USERDATA, Context.MODE_PRIVATE);
try{
if (pSharedPref != null){
String jsonString = pSharedPref.getString(key, (new JSONObject()).toString());
JSONObject jsonObject = new JSONObject(jsonString);
Iterator<String> keysItr = jsonObject.keys();
while(keysItr.hasNext()) {
String k = keysItr.next();
String v = (String) jsonObject.get(k);
outputMap.put(k,v);
}
}
}catch(Exception e){
e.printStackTrace();
}
return outputMap;
}
Context
কোনও লাইব্রেরি থেকে উদাহরণটি অ্যাক্সেস করবেন সেভাবে আপনি এটি করবেন । এই অন্যান্য এসও প্রশ্নটি দেখুন: কোনও অ্যান্ড্রয়েড লাইব্রেরি প্রকল্পে অ্যাপ্লিকেশনের প্রসঙ্গটি পাওয়া কি সম্ভব?
পরিবর্তে আপনি JSON ব্যবহার করার চেষ্টা করতে পারেন।
সংরক্ষণের জন্য
try {
HashMap<Integer, String> hash = new HashMap<>();
JSONArray arr = new JSONArray();
for(Integer index : hash.keySet()) {
JSONObject json = new JSONObject();
json.put("id", index);
json.put("name", hash.get(index));
arr.put(json);
}
getSharedPreferences(INSERT_YOUR_PREF).edit().putString("savedData", arr.toString()).apply();
} catch (JSONException exception) {
// Do something with exception
}
পাওয়ার জন্য
try {
String data = getSharedPreferences(INSERT_YOUR_PREF).getString("savedData");
HashMap<Integer, String> hash = new HashMap<>();
JSONArray arr = new JSONArray(data);
for(int i = 0; i < arr.length(); i++) {
JSONObject json = arr.getJSONObject(i);
hash.put(json.getInt("id"), json.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}
String converted = new Gson().toJson(map);
SharedPreferences sharedPreferences = getSharedPreferences("sharepref",Context.MODE_PRIVATE);
sharedPreferences.edit().putString("yourkey",converted).commit();
মানচিত্র -> স্ট্রিং
val jsonString: String = Gson().toJson(map)
preferences.edit().putString("KEY_MAP_SAVE", jsonString).apply()
স্ট্রিং -> মানচিত্র
val jsonString: String = preferences.getString("KEY_MAP_SAVE", JSONObject().toString())
val listType = object : TypeToken<Map<String, String>>() {}.type
return Gson().fromJson(jsonString, listType)
আপনি এটি শেয়ারড প্রেফস ফাইলটিতে উত্সর্গ করতে পারেন (উত্স: https://developer.android.com/references/android/content/SharedPreferences.html ):
getAll
এপিআই স্তর 1 ম্যাপে যুক্ত করা হয়েছে সমস্ত মানটি পছন্দ থেকে পুনরুদ্ধার করুন)
মনে রাখবেন যে আপনাকে এই পদ্ধতিতে ফিরে আসা সংগ্রহটি পরিবর্তন করতে হবে না বা এর কোনও বিষয়বস্তু পরিবর্তন করতে হবে না। আপনি যদি করেন তবে আপনার সঞ্চিত ডেটাটির ধারাবাহিকতা গ্যারান্টিযুক্ত নয়।
রিটার্ন ম্যাপ পছন্দগুলি প্রতিনিধিত্ব করে জোড় কী / মানের তালিকা সহ একটি মানচিত্র ফেরত দেয়।
সংকীর্ণ ব্যবহারের ক্ষেত্রে যখন আপনার মানচিত্রে কেবল কয়েক ডজন উপাদান ছাড়া আর কিছু থাকবে না আপনি SharedPreferences একটি মানচিত্রের মতো কাজ করে এবং প্রতিটি প্রবেশকে কেবল নিজের কী অনুসারে সংরক্ষণ করতে পারবেন এই সুবিধাটি নিতে পারেন:
Map<String, String> map = new HashMap<String, String>();
map.put("color", "red");
map.put("type", "fruit");
map.put("name", "Dinsdale");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
// OR use a specific pref name
// context.getSharedPreferences("myMegaMap");
for (Map.Entry<String, String> entry : map.entrySet()) {
prefs.edit().putString(entry.getKey(), entry.getValue());
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
// OR use a specific pref name
// context.getSharedPreferences("myMegaMap");
prefs.getString("color", "pampa");
আপনি যদি কাস্টম পছন্দসই নামটি ব্যবহার করেন (যেমন context.getSharedPreferences("myMegaMap")
) আপনি সমস্ত কী কী সাথে পেতে পারেনprefs.getAll()
তোমার মান কোনো ধরনের SharedPreferences দ্বারা সমর্থিত হতে পারেন:
String
,int
,long
,float
,boolean
।
আমি এটিকে কিছুটা দেরিতে জানি তবে আমি আশা করি এটি যে কোনও একটির পড়ার ক্ষেত্রে সহায়ক হতে পারে ..
সুতরাং আমি কি করি
1) হ্যাশম্যাপ্যান্ড যুক্ত ডেটা যুক্ত করুন: -
HashMap hashmapobj = new HashMap();
hashmapobj.put(1001, "I");
hashmapobj.put(1002, "Love");
hashmapobj.put(1003, "Java");
2) শেয়ার প্রিফেরেন্স সম্পাদক হিসাবে এটি লিখুন:
SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES,Context.MODE_PRIVATE);
Editor editor = sharedpreferences.edit();
editor.putStringSet("key", hashmapobj );
editor.apply(); //Note: use commit if u wan to receive response from shp
3) ডেটা পড়া যেমন: - আপনি চান এমন একটি নতুন শ্রেণিতে যেখানে এটি পড়তে চান
HashMap hashmapobj_RECIVE = new HashMap();
SharedPreferences sharedPreferences (MyPREFERENCES,Context.MODE_PRIVATE;
//reading HashMap from sharedPreferences to new empty HashMap object
hashmapobj_RECIVE = sharedpreferences.getStringSet("key", null);