অ্যান্ড্রয়েডে অনেক ভাবেই ডেটা স্টোর করা যায়। এগুলোর মধ্যে একটা পদ্ধতি হচ্ছে Shared Preferences। শেয়ার্ড প্রেফারেন্সে কী ভ্যালু পেয়ারে ডেটা সেভ করে রাখা যায়। মানে আমরা প্রতিটা কী এর জন্য এক একটা করে ভ্যালু রাখতে পারব। যেমন ব্যবহার কারীর নাম, সেটিং ইত্যাদি সেভ করে রাখা। ধরে নিচ্ছি আমাদের অ্যাপ হচ্ছে মাল্টি ল্যাঙ্গুয়াল। একের অধিক ল্যাঙ্গুয়েজ সাপোর্ট করে। তো ব্যবহারকারী সিলেক্ট করে রাখল বাংলাতে অ্যাপটি ব্যবহার করবে। ভ্যারিয়েবলে এই সেটিং সেভ করে রাখলে এক্টিভি ডিস্ট্রয় হওয়ার সাথে সাথে ভ্যারিয়েবলটির ডেটাও মুছে যাবে। আর তাই এই ধরনের সেটিং গুলো সাধারণত আমরা শেয়ার্ড প্রেফারেন্সে স্টোর করে রাখতে পারি।
শেয়ার্ড প্রেফারেন্স ডেটা গুলো একটা XML ফাইলে রাখে। যা DATA/data/{application package} এর ভেতর shared_prefs নামক ফোল্ডারে পাওয়া যাবে।
শেয়ার্ড প্রেফারেন্স ব্যবহার করা:
শেয়ার্ড প্রেফারেন্সেস ব্যবহার করার জন্য getSharedPreferences() কল করতে হয় যা আমদের SharedPreference ইন্সটেন্স রিটার্ণ করবে। যেমন নিচের মত করে আমরা শেয়ার্ড প্রেপারেন্সের ইন্সট্যান্স তৈরি করে নিতে পারিঃ
SharedPreferences pref = getSharedPreferences(PREFS_NAME, mode );
এখানে PREFS_NAME হচ্ছে XML ফাইলটির নাম। আর mode হচ্ছে অপারেটিং মুড। শেয়ার্ড প্রেফারেন্সের জন্য নিচের মুড গুলো আমরা ব্যবহার করতে পারিঃ
- MODE_PRIVATE: এটি হচ্ছে ডিফল্ট মুড। যা ব্যবহার করলে আমাদের সেভ করা ডেটা গুলো শুধু আমাদের অ্যাপ থেকেই ব্যবহার করা যাবে।
- MODE_WORLD_READABLE: এই মুডে ডেটা সেভ করলে যে কোন অ্যাপ থেকেই ঐ ডেটা গুলো রিড করা যাবে।
- MODE_WORLD_WRITEABLE: এই মুডে ডেটা সেভ করলে যে কোন অ্যাপ থেকেই ঐ ডেটা গুলো রিড এবং রাইট করা যাবে। [never ever do this!]
- MODE_MULTI_PROCESS: একের অধিক ইন্সট্যান্স তৈরি করার জন্য সাধারণত এই মুড ব্যবহার করা হয়।
- MODE_APPEND: যদি আগে একই কীতে কোন ডেটা সেভ করে রাখি, তাহলে এটি দিয়ে ঐ কীতে ডেটা রিপ্লেস না করে আগের ডেটার সাথে যুক্ত করে দিবে।
শেয়ার্ড প্রেফারেন্সে ডেটা এডিট করার জন্য আমাদের এডিটর দরকার। আর তা পেতে পারি এভাবেঃ
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); Editor editor = pref.edit();
ডেটা যুক্ত করাঃ
ডেটা আমরা এভাবে যুক্ত করতে পারিঃ
editor.putString("key", "value"); editor.commit();
এডিট শেষে শেয়ার্ড প্রেফারেন্স সেভ করার জন্য editor.commit() ব্যবহার করা হয়। putString দিয়ে কোন স্ট্রিং ভ্যালু সেভ করা হয়। এটি ছাড়াও আমরা নিচের মেথড গুলো ব্যবহার করতে পারিঃ
editor.putBoolean("key", true); // Storing boolean - true/false editor.putInt("key", "int value"); // Storing integer editor.putFloat("key", "float value"); // Storing float editor.putLong("key", "long value"); // Storing long
শেয়ার্ড প্রেফারেন্স থেকে ডেটা পড়াঃ
ডেটা যদি আমরা putString দিয়ে রাখি, সেগুলো আবার রিড করতে পারি getString দিয়ে। একই ভাবে অন্যান্য ডেটা টাইপ ও আমরা পেতে পারি একই ভাবে:
pref.getInt("key", null); // getting Integer pref.getFloat("key", null); // getting Float pref.getLong("key", null); // getting Long pref.getBoolean("key", null); // getting boolean
ডেটা রিমুভ
remove(“key”) দিয়ে ঐ কী এর ভ্যালুটি রিমুভ করতে ব্যবহার করা হয়।
সব গুলো ডেটা রিমুভ করার জন্য clear() মেথড ব্যবহার করা হয়।
উদাহরণ
আমরা একটা উদাহরণ দেখতে পারি। শেয়ার্ড প্রেফারেন্স ব্যবহার করে কিছু ডেটা সেভ করব। এবংন পরে ঐ ডেটা গুলো লগে আউটপুট দিব। আপনারা চাইলে কোন টেক্সট ভিউতেও আউটপুট দিতে পারেন। আবার ইউজার থেকে ডেটা ইনপুটও নিতে পারেন। এখানে শুধু MainActivity.java ফাইলটা দিয়ে দিলামঃ
import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SharedPreferences pref = getApplicationContext().getSharedPreferences("settings", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("string", "This is a string"); // Storing String editor.putBoolean("boolean", true); // Storing boolean - true/false editor.putInt("integer", 111); // Storing integer editor.putFloat("float", 3.4f); // Storing float editor.putLong("long", 62345678910L); // Storing long editor.commit(); // Retrieve Log.d("StringValue",pref.getString("string", null)); Log.d("booleanValue", String.valueOf(pref.getBoolean("boolean", false))); Log.d("IntegerValue", String.valueOf(pref.getInt("integer", 0))); Log.d("floatValue", String.valueOf(pref.getFloat("float", 0))); Log.d("longValue", String.valueOf(pref.getFloat("long", 0))); } }
অ্যাপে বেশি পরিমান ডেটা সেভ করতে হলে শেয়ার্ড প্রেফারেন্স খুব একটা ভালো অপশন হয় না। তার জন্য আমাদের ডেটাবেজ ব্যবহার করতে হতে পারে। অ্যান্ড্রয়েড ডিফল্ট ভাবে SQLite দেওয়া থাকে। আমরা চাইলে SQLite এ ডেটা সেভ করে রাখতে পারি। তা নিয়ে বিস্তারিত জানা যাবে অ্যান্ড্রয়েড অ্যাপে SQLite ডেটাবেজ ব্যবহার লেখাটিতে।