Android application တွေကို develop လုပ်မယ်ဆိုရင် data တွေကို သိမ်းဆည်းမယ် ပြီးရင် လိုအပ်တဲ့နေရာကနေ ပြန်ခေါ် ယူသုံးနိုင်ဖို့အတွက် သိသင့်တာတွေရှိပါသေးတယ်။ ဒါမှသာ Android platform ကပေးထားတဲ့ Sample Application ကို ဖတ်ကြည့်ရင် ဒါကြောင့်ဒီလိုရေး ထားတာပါလား လို့နမူနာယူကြည့်နိုင်မှာပါ။ Android ကတော့ Open Source ပေးထားတာလေးတွေက တကယ်ရည်ရွယ်ချက်ကောင်းပါတယ်။ ဥပမာ Searchable Dictionary လိုမျိုးတွေ၊Note Pad တွေ၊ soft keyboard တွေ။ ဒါ့အပြင် Open source code တွေချပြ တင်ပေးထားတဲ့ Android Game application တွေတောင်တွေ့မိပါသေးတယ်။ ဒါကြောင့် အခုပြောမယ့် အကြောင်းအရာတွေနဲ့ စပြီး အခြေတည်နေတယ်လို့ ဆိုကြပါစို့။ ဒီမှာ ဘာတွေ သိရမလဲဆိုရင် တော့ 1. Shared Preferences : Activity တစ်ခုကနေ တစ်ခုကို global state တွေအကူးပြောင်းလုပ်ဖို့ (package တူတူအတွင်းမှာရယ်၊ package မတူရင်ရော) 2. file system: ကိုယ့် application ထဲမှာ custom file တွေကိုထည့်ထားတယ် ပြီးရင် ပြန်ထုတ်ကြည့်မယ်၊ စတာတွေ… 3. XML recourses file: တွေကို အသုံးပြုပုံတွေ 4. SD card: ထဲမှာ သွားပြီး သိမ်းဆည်းမှုတွေလုပ်တာတွေ 5. Content provider: ကိုသုံးပြီး data တွေ share တာတွေ 6. SQLite: ဆိုတဲ့ relational database အသုံးပြုနည်းတွေ ကိုဆွေးနွေးသွားမှာပါ။ ပြောရမှာတွေက များတော့ အပိုင်းပိုင်းခွဲပြီး ပြောဖို့စီစဉ်ထားပါတယ်။ ပြီးမှ sample application တွေလေ့လာ။ ပြီးတော့ ကိုယ်တိုင် Demo လေးတွေ ရေးကြည့်ကြရအောင်။ အခု ဒီ ကျုတိုရီရယ်လေးမှာ ဖော်ပြထားတာကတော့ W.Frank Ableson, Charlie Collins, Robi Sen ရဲ့ “A Developer’s Guide” စာအုပ်ထဲမှ ဆိုတာကိုလည်း ရည်ညွှန်းချင်ပါသေးတယ်။ ခုရေးထားတာတွေထက်ပိုပြီး သိတဲ့လူများရှိရင်လည်း ညွှန်ပြပေးနိုင်ကြပါတယ်။ ကဲကဲ အစပျိုးနေတာကို တခန်းရပ်လို့ လိုရင်း ကိုသွားကြပါစို့။
1. Shared preferences ကိုအသုံးပြုခြင်း
Android ထဲမှာ Activity တစ်ခုကနေ Activity တစ်ခုကို ကူးတဲ့အခါ တချို့သော global state တွေကိုသိမ်းချင်တဲ့အခါ SharedPreferences ဆိုတဲ့ object ကိုသုံးတာက အသုံးတဲ့တဲ့နည်းတစ်ခုပါ။ ဒီတော့ အဲ့ဒီ preference object ထဲကို ဘယ်လို data ထည့်မယ် ပြန်ထုတ်မယ်ဆိုတာကို သိအောင်လုပ်ကြမယ်။ ပထမဆုံးတနည်းကတော့ same package အတွင်းမှာ shared preferences တွေသုံးတဲ့နည်းပါ။ SharedPreferences object ကို ဘယ်ကနေ တဆင့် သုံးရမလဲ ဆိုရင်တော့ ကိုယ့်အခုအသုံးပြုနေတဲ့ Context ကနေတဆင့်သုံးရမှာပါ။ သုံးပုံသုံးနည်းကတော့ sharedpreferences object တစ်ခုလိုချင်ရင် context.getSharedPreferences(String name,int accessMode); နဲ့ခေါ်ပါ။ သူ့ရဲ့သဘောက တော့ကိုယ့်ရဲ့ data တွေကို auto xml file လေးဆောက်ပြီး သိမ်းထားပေးတာပါ။
အခုပြောပြမှာကတော့ same application package အတွင်းမှာ Activity တစ်ခုကနေ တစ်ခုကို sharepreference နဲ့ data သယ်သွားတဲ့ပုံစံပါ။ အဲ့ဒီလို့ data သယ်ပေးတဲ့ အခါမှာလည်း primitive data type (String, Long, Float, Boolean, Int) တွေကိုဘဲ သယ်ပေးနိုင်တာပါ(custom object တွေမရပါဘူး)။
1. စစချင်း sharePreferences object တစ်ခုကို context ကနေတဆင့် create လုပ်
SharedPreferences myPrefs = this.getSharedPreferences(“myPrefs”,MODE_WORLD_READABLE);
2. sharedPrefrences ထဲကို data တွေ ထည့်ချင်ရင် Editor ကနေတဆင့်ထည့်ရမှာပါ။ ဒီတော့ Editor ကို ဒီလိုကြေငြာပါမယ်။
SharedPreferences.Editor presEditor = myPrefs.edit();
3. ပြီးရင်တော့ Editor ကနေတဆင့် primitive datatype တွေထည့်နိုင်ပါပြီ။
prefsEditor.putString(site,”www.myanmartutorial.com”);
prefsEditor.putString(user,”12345”);
prefsEditor.putString(like,”yes”);
4. ကဲထည့်ချင်တဲ့ data တွေထည့်ပြီးရင်တော့ အခုလို commit လုပ်လိုက်ပါ။
prefsEditor.commit();
အခုဆိုရင် sharedPreferences object ထဲကို data ထည့်ပြီးသွားပါပြီ။ နောက် Activity ကနေ ပြန်ခေါ်ချင်ရင်တော့ sharedPreferences object ဆောက်ပြီး ပြန်ခေါ်ရမှာပါ။
SharedPreferences myPrefs = this.getSharedPreferences(“myPrefers”,MODE_WORLD_READABLE);
ဒီလိုမျိုး getString() နဲ့ပြန်ယူနိုင်ပါပြီ။
String site=myPrefs.getString(site,null);
String site=myPrefs.getString(user,null);
အင်းဒီလောက်ဆို နည်းနည်းသဘောကိုသိသွားလောက်ပြီထင်တယ်နော်။ ဒါကြောင့်အောက်မှာပြထားတဲ့ အတိုင်း screen နှစ်ခုကို data လေးကူးတဲ့ Application လေးရေးကြည့်ရအောင်။
ဒီတော့ screen တစ်ခုမှာ EditText View 4ခုနဲ့ NextScreen ကိုသွားဖို့ button တစ်ခုထည့်ထားပါတယ်။ နောက် screen မှာတော့ အရှေ့က screen ကနေရိုက်လိုက်တာကို ပြန်လက်ခံဖို့ Text View 4 ခုထည့်ထားတယ်နော်။
SharedPrefTestInput.java တွင်
SharePrefTestOutput.java တွင်
SharedPreferences XML files တွေကိုတော့ /data/data/ကိုယ့်packageName/shared_prefs အောက်မှာ XML file တွေအနေနဲ့သိမ်းပေးထားပါတယ်။ အပေါ်ကပြခဲ့တဲ့ ကျူတိုရီရယ်မှာ စမ်းထားတဲ့ sharePreferences ကို တကယ် XML file create လုပ်မလုပ် အခုလို adb shell ကနေသွားပြီးကြည့် လိုက်ရင်ဖြင့် အခုကိုတွေ့နိုင်မှာပါ။
Tips: cmd> cd myAndroid/tool/ > adb shell > cd data > cd data > cd mmTutorials.sharePreferences > cd shared_prefs > ls
ကိုယ် create လုပ်လိုက်တဲ့ Application တိုင်း (.apk) တိုင်းမှာ ကိုယ်ပိုင် ID ရှိကြပါတယ်။ ကိုယ့်ရဲ့ ဒီ sharedpreference တွေကိုလည်း ဒီID နာမည်ကဘဲပိုင်ဆိုင်တာပါ။ ဒီ sharedpreference ထဲက data ကို တခြား package ကနေခေါ်ချင်ရင်တော့ outside ကခေါ်နိုင်တဲ့ permission ကိုပေးရမှာပါ။ (eg. WORLD_READABLE). တခြား application ရဲ့ sharedpreference တွေကိုသိချင်၊ သုံးချင်ရင်တော့ တခြား application ရဲ့ context ကိုသိမှရပါမယ်။
Coming soon after my exam: Using other application’s sharedpreferences
(မေးမြန်းအကြံပြုချက်များကို ကြိုဆိုလျက်)













ရှင်းပြထားတာ အဆင့်ဆင့် အလွန်ကောင်းပါတယ်။ ဒါကိုနားလည်ဖို့ ကိုယ့်ဟာကိုယ် တော်တော် စမ်းခဲ့ရဖူးတယ်။
နောက်လူတွေ လေ့လာရလွယ်တာပေါ့။
Application ရဲ့ activity က ရေးလိုက်တဲ့ Shared Preference တစ်ခုကို Home screen widget application (same package) ကနေဖတ်လို့ရမရသိချင်ပါတယ်။ ဘယ်လိုစမ်းရမလဲ။
Something like in this way ?
http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html