Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में HashMap को SharedPreferences में कैसे सेव करें?

SharedPreferences केवल प्रिमिटिव प्रकार सपोर्ट करता है। HashMap सेव करने के लिए JSON सीरियलाइज़ेशन का उपयोग करें।

चरण 1: नया प्रोजेक्ट बनाएं

Android Studio में नया प्रोजेक्ट बनाएं।

चरण 2: UI लेआउट

res/layout/activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:id="@+id/rlMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical">
    <EditText android:id="@+id/etName" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:hint="Name" android:inputType="text" />
    <EditText android:id="@+id/etAge" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:hint="Age" android:inputType="number" />
    <EditText android:id="@+id/etGame" android:layout_width="match_parent"
        android:layout_height="wrap_content" android:hint="Favourite game" android:inputType="text" />
    <Button android:layout_width="match_parent" android:layout_height="wrap_content"
        android:layout_marginTop="16dp" android:onClick="saveLocal" android:text="Save Local" />
</LinearLayout>

चरण 3: JSON सीरियलाइज़ेशन लॉजिक

src/MainActivity.java:

package app.com.sample;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;

public class MainActivity extends AppCompatActivity {
    final String MAP_KEY = "user_map";
    EditText etName, etAge, etGame;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        etName = findViewById(R.id.etName);
        etAge = findViewById(R.id.etAge);
        etGame = findViewById(R.id.etGame);

        Map<String, Object> savedMap = loadMap();
        if (savedMap.containsKey("name")) etName.setText(Objects.toString(savedMap.get("name")));
        if (savedMap.containsKey("age")) etAge.setText(Objects.toString(savedMap.get("age")));
        if (savedMap.containsKey("game")) etGame.setText(Objects.toString(savedMap.get("game")));
    }

    public void saveLocal(View view) {
        String name = etName.getText().toString().trim();
        String age = etAge.getText().toString().trim();
        String game = etGame.getText().toString().trim();

        if (name.isEmpty() || age.isEmpty() || game.isEmpty()) {
            Toast.makeText(this, "All fields required", Toast.LENGTH_SHORT).show();
            return;
        }

        Map<String, Object> inputMap = new HashMap<>();
        inputMap.put("name", name);
        inputMap.put("age", age);
        inputMap.put("game", game);
        saveMap(inputMap);
        Toast.makeText(this, "Saved Locally!", Toast.LENGTH_SHORT).show();
    }

    private void saveMap(Map<String, Object> inputMap) {
        SharedPreferences prefs = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
        JSONObject jsonObject = new JSONObject(inputMap);
        String jsonString = jsonObject.toString();
        prefs.edit().putString(MAP_KEY, jsonString).apply();
    }

    private Map<String, Object> loadMap() {
        Map<String, Object> outputMap = new HashMap<>();
        SharedPreferences prefs = getApplicationContext().getSharedPreferences("MyVariables", Context.MODE_PRIVATE);
        try {
            String jsonString = prefs.getString(MAP_KEY, "{}");
            JSONObject jsonObject = new JSONObject(jsonString);
            Iterator<String> keys = jsonObject.keys();
            while (keys.hasNext()) {
                String key = keys.next();
                outputMap.put(key, jsonObject.get(key));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return outputMap;
    }
}

बेहतर विकल्प: Gson लाइब्रेरी

implementation 'com.google.code.gson:gson:2.10.1'

// सेव करें
String json = new Gson().toJson(map);
prefs.edit().putString(KEY, json).apply();

// लोड करें
Type type = new TypeToken<Map<String, Object>>(){}.getType();
Map<String, Object> map = new Gson().fromJson(prefs.getString(KEY, "{}"), type);

ध्यान दें

  • SharedPreferences मुख्य थ्रेड पर काम करता है - बड़े डेटा के लिए Room/Database उपयोग करें
  • apply() एसिंक्रोनस है, commit() सिंक्रोनस
  • संवेदनशील डेटा के लिए EncryptedSharedPreferences उपयोग करें
  1. Android में GPS को प्रोग्रामेटिकली कैसे सक्षम/अक्षम करें? Android में GPS को प्रोग्रामेटिकली कैसे सक्षम/अक्षम करें?

    Android में GPS स्थिति जांचने और सेटिंग्स खोलने का गाइड महत्वपूर्ण: सुरक्षा कारणों से Android ऐप्स को GPS सीधे सक्षम/अक्षम करने की अनुमति नहीं देता (Android 2.3+ से)। यह ट्यूटोरियल GPS स्थिति जांचने और उपयोगकर्ता को लोकेशन सेटिंग्स स्क्रीन पर ले जाने का सही तरीका दिखाता है। चरण 1: नया प्रोजेक्ट बना

  1. Android में दी गई URL से इमेज डाउनलोड करके कैसे सेव करें? Android में दी गई URL से इमेज डाउनलोड करके कैसे सेव करें?

    Android में AsyncTask से URL से इमेज डाउनलोड करने का गाइड यह ट्यूटोरियल दिखाता है कि कैसे AsyncTask, HttpURLConnection और BitmapFactory का उपयोग करके बैकग्राउंड थ्रेड में इमेज डाउनलोड करके ImageView में दिखाया जाए। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में File → New Project चुनकर नया प्रोजेक्ट

  1. एंड्रॉइड में दूसरे ऐप के SharedPreferences कैसे एक्सेस करें एंड्रॉइड में दूसरे ऐप के SharedPreferences कैसे एक्सेस करें

    शेयर्ड यूजर ID के माध्यम से अन्य ऐप्लिकेशन के SharedPreferences पढ़ना डिफ़ॉल्ट रूप से एंड्रॉइड ऐप्स सैंडबॉक्स्ड होते हैं और एक-दूसरे के SharedPreferences एक्सेस नहीं कर सकते। हालांकि, यदि दोनों ऐप्स एक ही sharedUserId और समान सर्टिफिकेट से साइन हों, तो वे डेटा साझा कर सकते हैं। नोट: एंड्रॉइड 10+ (AP