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

অ্যান্ড্রয়েড অ্যাপের SharedPreferences ডেটা মুছে ফেলার পদ্ধতি

SharedPreferences ডেটা ডিলিট করা: remove(), clear() এবং সম্পূর্ণ রিসেট

অ্যান্ড্রয়েডে SharedPreferences-এ সংরক্ষিত ডেটা মুছে ফেলার একাধিক পদ্ধতি রয়েছে - নির্দিষ্ট কী মুছা, সব ডেটা মুছা, বা পুরো প্রিফারেন্স ফাইল ডিলিট করা। এই টিউটোরিয়ালে সব পদ্ধতিগুলো উদাহরণসহ ব্যাখ্যা করা হলো।

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

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

Android Studio-তে একটি নতুন প্রজেক্ট তৈরি করুন।

ধাপ ২: স্ট্রিং রিসোর্স (res/values/strings.xml)

<resources>
    <string name="app_name">SharedPrefs Demo</string>
    <string name="sharedPref_key_player">player_name</string>
    <string name="sharedPref_key_country">country_name</string>
</resources>

ধাপ ৩: লেআউট ফাইল (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:gravity="center"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tvBeforeDelete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:textAlignment="center"
        android:textSize="16sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/btnDeleteSpecific"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="নির্দিষ্ট কী মুছুন (Country)" />

    <Button
        android:id="@+id/btnClearAll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="সব ডেটা মুছুন (Clear All)" />

    <Button
        android:id="@+id/btnDeleteFile"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="পুরো প্রিফারেন্স ফাইল ডিলিট করুন" />

    <TextView
        android:id="@+id/tvAfterDelete"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:textAlignment="center"
        android:textSize="16sp"
        android:textStyle="bold" />

</LinearLayout>

ধাপ ৪: MainActivity.java - সম্পূর্ণ ইমপ্লিমেন্টেশন

package com.example.sharedprefsdelete;

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

public class MainActivity extends AppCompatActivity {

    TextView tvBeforeDelete, tvAfterDelete;
    SharedPreferences sharedPreferences;
    SharedPreferences.Editor editor;
    Button btnDeleteSpecific, btnClearAll, btnDeleteFile;

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

        tvBeforeDelete = findViewById(R.id.tvBeforeDelete);
        tvAfterDelete = findViewById(R.id.tvAfterDelete);
        btnDeleteSpecific = findViewById(R.id.btnDeleteSpecific);
        btnClearAll = findViewById(R.id.btnClearAll);
        btnDeleteFile = findViewById(R.id.btnDeleteFile);

        sharedPreferences = getPreferences(Context.MODE_PRIVATE);
        editor = sharedPreferences.edit();

        // প্রারম্ভিক ডেটা সেভ করুন
        saveInitialData();
        displayData(tvBeforeDelete, "মুছে ফেলার আগে:");

        // বাটন ক্লিক লিসেনার সেট করুন
        btnDeleteSpecific.setOnClickListener(v -> deleteSpecificKey());
        btnClearAll.setOnClickListener(v -> clearAllData());
        btnDeleteFile.setOnClickListener(v -> deleteEntireFile());
    }

    private void saveInitialData() {
        editor.putString(getString(R.string.sharedPref_key_player), "ক্রিস্টিয়ানো রোনাল্ডো");
        editor.putString(getString(R.string.sharedPref_key_country), "পোর্টুগাল");
        editor.apply();
    }

    private void displayData(TextView textView, String prefix) {
        String player = sharedPreferences.getString(getString(R.string.sharedPref_key_player), "");
        String country = sharedPreferences.getString(getString(R.string.sharedPref_key_country), "");
        
        textView.setText(prefix + "\nখেলোয়াড়: " + player + "\nদেশ: " + country);
    }

    // পদ্ধতি ১: নির্দিষ্ট কী মুছা
    private void deleteSpecificKey() {
        editor.remove(getString(R.string.sharedPref_key_country));
        editor.apply();
        
        displayData(tvAfterDelete, "Country মুছে ফেলার পর:");
        Toast.makeText(this, "Country কী মুছে ফেলা হয়েছে", Toast.LENGTH_SHORT).show();
    }

    // পদ্ধতি ২: সব কী-ভ্যালু মুছা (clear)
    private void clearAllData() {
        editor.clear();
        editor.apply();
        
        displayData(tvAfterDelete, "সব ডেটা মুছে ফেলার পর:");
        Toast.makeText(this, "সকল SharedPreferences ডেটা মুছে ফেলা হয়েছে", Toast.LENGTH_SHORT).show();
    }

    // পদ্ধতি ৩: পুরো প্রিফারেন্স ফাইল ডিলিট করা
    private void deleteEntireFile() {
        // getPreferences() ব্যবহারের ক্ষেত্রে ফাইলের নাম পাওয়া কঠিন, 
        // তাই getSharedPreferences() ব্যবহার করুন ফাইল ডিলিট করার জন্য
        
        // পদ্ধতিঃ Context.deleteSharedPreferences()
        boolean deleted = deleteSharedPreferences("com.example.sharedprefsdelete_preferences");
        
        if (deleted) {
            // ডেটা রি-লোড করুন (এখন খালি থাকবে)
            sharedPreferences = getPreferences(Context.MODE_PRIVATE);
            editor = sharedPreferences.edit();
            displayData(tvAfterDelete, "ফাইল ডিলিট করার পর (নতুন ফাইল):");
            Toast.makeText(this, "SharedPreferences ফাইল ডিলিট করা হয়েছে", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "ফাইল ডিলিট ব্যর্থ", Toast.LENGTH_SHORT).show();
        }
    }
}

তিনটি পদ্ধতির তুলনা

পদ্ধতি মেথড ব্যবহার ক্ষেত্র
নির্দিষ্ট কী মুছা editor.remove("key") লগআউট করলে নির্দিষ্ট টোকেন মুছা, একটি সেটিং রিসেট করা
সব ডেটা মুছা editor.clear() সম্পূর্ণ অ্যাপ রিসেট, ইউজার ডেটা 와ইপ
পুরো ফাইল ডিলিট context.deleteSharedPreferences("filename") প্রিফারেন্স ফাইলের নাম জানা থাকলে, পুরোপুরি ক্লিন আপ

গুরুত্বপূর্ণ নোটস

  • apply() vs commit(): apply() অ্যাসিঙ্ক্রোনাস (নন-ব্লকিং), commit() সিঙ্ক্রোনাস (ব্লকিং)। সাধারণত apply() ব্যবহার করুন।
  • getPreferences() vs getSharedPreferences(): getPreferences() অ্যাক্টিভিটির প্রাইভেট ফাইল ব্যবহার করে (নাম অটো জেনারেটেড)। ফাইল ডিলিট করতে getSharedPreferences("filename", MODE_PRIVATE) ব্যবহার করুন।
  • Multi-process: একাধিক প্রসেসে শেয়ার্ড প্রিফারেন্স ব্যবহার করলে MODE_MULTI_PROCESS (ডিপ্রিকেইটেড) বা ContentProvider ব্যবহার করুন।

ফলাফল

অ্যাপ্লিকেশন রান করলে প্রাথমিক ডেটা দেখাবে। বাটনগুলো চাপলে যথাক্রমে নির্দিষ্ট কী, সব ডেটা, বা পুরো ফাইল মুছে ফেলা যাবে এবং পরিবর্তন নিচের টেক্সটভিউতে দেখাবে।

অ্যান্ড্রয়েড অ্যাপের SharedPreferences ডেটা মুছে ফেলার পদ্ধতি
  1. অ্যান্ড্রয়েডে CheckBox ব্যবহারের পদ্ধতি

  2. অ্যান্ড্রয়েড অ্যাপে JSONArray পার্স করার পদ্ধতি

  3. অ্যান্ড্রয়েডে Toast মেসেজ দেখানোর পদ্ধতি

  4. Android-এ ৫ সেকেন্ড ব্যবহারকারীর নিষ্ক্রিয়তা শনাক্ত করা