কম্পিউটার টিউটোরিয়াল

Android-এ SharedPreferences ব্যবহার করে ডেটা সংরক্ষণ, পঠন এবং সম্পাদনা

Android-এ SharedPreferences ব্যবহার করে ডেটা সংরক্ষণ, পঠন এবং সম্পাদনা

SharedPreferences হলো Android-এ ছোট পরিমাণের প্রিমিটিভ ডেটা (স্ট্রিং, ইন্টিজার, বুলিয়ান, ফ্লোট ইত্যাদি) কি-ভ্যালু জোড়া আকারে সংরক্ষণ করার একটি সহজ এবং কার্যকর উপায়। এটি অ্যাপ্লিকেশন রিস্টার্ট হওয়ার পরেও ডেটা বজায় রাখে।

প্রয়োজনীয় ধাপসমূহ

ধাপ ১: নতুন প্রজেক্ট তৈরি করুন

Android Studio-তে File → New Project এ যান এবং প্রজেক্ট তৈরি করুন।

ধাপ ২: লেআউট ফাইল তৈরি করুন (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/etName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/etEmail"
        android:layout_marginTop="40dp"
        android:ems="10"
        android:hint="নাম"
        android:inputType="text" />

    <EditText
        android:id="@+id/etEmail"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/etName"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:ems="10"
        android:hint="ইমেইল"
        android:inputType="textEmailAddress" />

    <Button
        android:id="@+id/btnSave"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerInParent="true"
        android:onClick="Save"
        android:text="সংরক্ষণ" />

    <Button
        android:id="@+id/btnRetrieve"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_centerHorizontal="true"
        android:onClick="Get"
        android:text="পড়ুন" />

    <Button
        android:id="@+id/btnClear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_centerInParent="true"
        android:onClick="clear"
        android:text="মুছুন" />

</RelativeLayout>

ধাপ ৩: MainActivity.java বাস্তবায়ন করুন

package app.com.sample;

import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText editTextName, editTextEmail;
    public static final String mypreference = "mypref";
    public static final String Name = "nameKey";
    public static final String Email = "emailKey";
    SharedPreferences sharedpreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editTextEmail = findViewById(R.id.etEmail);
        editTextName = findViewById(R.id.etName);

        // SharedPreferences ইনিশিয়ালাইজ করুন
        sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE);

        // পূর্বে সংরক্ষিত ডেটা থাকলে লোড করুন
        if (sharedpreferences.contains(Name)) {
            editTextName.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            editTextEmail.setText(sharedpreferences.getString(Email, ""));
        }
    }

    // ডেটা সংরক্ষণ
    public void Save(View view) {
        String strName = editTextName.getText().toString();
        String strEmail = editTextEmail.getText().toString();

        SharedPreferences.Editor editor = sharedpreferences.edit();
        editor.putString(Name, strName);
        editor.putString(Email, strEmail);
        editor.apply(); // অ্যাসিঙ্ক্রোনাসলি সংরক্ষণ করে

        Toast.makeText(getApplicationContext(), "সংরক্ষিত হয়েছে", Toast.LENGTH_SHORT).show();
    }

    // ফিল্ড খালি করুন
    public void clear(View view) {
        editTextName = findViewById(R.id.etName);
        editTextEmail = findViewById(R.id.etEmail);
        editTextName.setText("");
        editTextEmail.setText("");
        Toast.makeText(getApplicationContext(), "খালি করা হয়েছে", Toast.LENGTH_SHORT).show();
    }

    // ডেটা পড়ুন
    public void Get(View view) {
        editTextName = findViewById(R.id.etName);
        editTextEmail = findViewById(R.id.etEmail);
        sharedpreferences = getSharedPreferences(mypreference, Context.MODE_PRIVATE);

        if (sharedpreferences.contains(Name)) {
            editTextName.setText(sharedpreferences.getString(Name, ""));
        }
        if (sharedpreferences.contains(Email)) {
            editTextEmail.setText(sharedpreferences.getString(Email, ""));
        }
        Toast.makeText(getApplicationContext(), "পুনরুদ্ধার করা হয়েছে", Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
}

ধাপ ৪: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
</manifest>

SharedPreferences-এর মূল কনসেপ্ট

মেথড বর্ণনা
getSharedPreferences(name, mode) SharedPreferences অবজেক্ট পাওয়ার জন্য। MODE_PRIVATE শুধুমাত্র আপনার অ্যাপ অ্যাক্সেস করতে পারে।
edit() এডিটর অবজেক্ট রিটার্ন করে যা ডেটা সংশোধনের জন্য ব্যবহৃত হয়।
putString(key, value) স্ট্রিং মান সংরক্ষণ করে। অন্য টাইপের জন্য putInt, putBoolean, putFloat ইত্যাদি।
apply() অ্যাসিঙ্ক্রোনাসলি পরিবর্তনগুলো কমিট করে (প্রস্তাবিত)।
commit() সিঙ্ক্রোনাসলি পরিবর্তনগুলো কমিট করে (বুলিয়ান রিটার্ন করে)।
getString(key, defaultValue) মান পেতে। যদি কীটি না থাকে তবে ডিফল্ট মান রিটার্ন করে।
contains(key) কোনো কী বিদ্যমান কিনা তা চেক করে।
remove(key) নির্দিষ্ট কী মুছে দেয়।
clear() সব কী-ভ্যালু মুছে দেয়।

সেরা অনুশীলন (Best Practices)

  • Context.MODE_PRIVATE ব্যবহার করুন যাতে অন্য অ্যাপ্লিকেশন ডেটা অ্যাক্সেস না করতে পারে।
  • বড় ডেটা বা জটিল অবজেক্টের জন্য SharedPreferences ব্যবহার করবেন না; সেক্ষেত্রে Room ডেটাবেস বা ফাইল স্টোরেজ ভালো।
  • apply() ব্যবহার করুন UI থ্রেড ব্লক না করার জন্য।
  • কী নামগুলিকে static final String হিসেবে সংজ্ঞায়িত করুন টাইপো এড়াতে।

আধুনিক বিকল্প: Jetpack DataStore

নতুন প্রজেক্টের জন্য Google DataStore (Preferences DataStore বা Proto DataStore) ব্যবহার করার পরামর্শ দেয়, যা:

  • করুটিন এবং ফ্লো সাপোর্ট করে
  • মেইন থ্রেডে ডিস্ক I/O এড়ায়
  • টাইপ সেফটি প্রদান করে (Proto DataStore-এ)
  • মাইগ্রেশন হ্যান্ডল করে

অ্যাপ্লিকেশন চালানোর পদ্ধতি

আপনার Android ডিভাইস কম্পিউটারের সাথে সংযুক্ত করুন। Android Studio-তে Run আইকনে ক্লিক করুন এবং ডিভাইসে আউটপুট দেখুন।

Android-এ SharedPreferences ব্যবহার করে ডেটা সংরক্ষণ, পঠন এবং সম্পাদনা

Android-এ SharedPreferences ব্যবহার করে ডেটা সংরক্ষণ, পঠন এবং সম্পাদনা

  1. অ্যান্ড্রয়েডে ড্র্যাগ অ্যান্ড ড্রপ ইমপ্লিমেন্টেশন

  2. অ্যান্ড্রয়েডে ডিভাইস আইডি (Device ID) পাওয়ার এবং সংরক্ষণ করার পদ্ধতি

  3. অ্যান্ড্রয়েডে মাউস এবং কীবোর্ড ব্যবহার করার পদ্ধতি

  4. অ্যান্ড্রয়েড টিভিতে ADB সেট আপ এবং ব্যবহার করার পদ্ধতি