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