iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
0
Mobile Development

iOS Developer Learning Android系列 第 23

iOS Developer Learning Android. Lesson 23 - 本地儲存 (可以不要用SQL嗎?)

  • 分享至 

  • xImage
  •  

說到本地儲存,一向是百家爭鳴
不管是iOS(有原生的UserDefault、NSKeyedArchiver、CoreData或是第三方的FMDB、Realm)
或是Android都有一樣的情況

光要開個資料庫 (SQLite),又是 SQLiteOpenHelper 、又是ContentProvider、又是Uri 的,好煩哪!於是,不少 persistence 的第三方類別庫因應而生,如 ActiviteAnroid、DBFlow、greenDAO、SugerORM、Realm、Requery 等等族繁不及備載
.
.
.
2017 年 5 月,Google I/O ’17 發佈了 Room,至此 persistence 歸於一統
綠豆湯

不過今天要沒有要開房間XD
而是要講講最基本的SharedPreferences
就跟我們的UserDefault一樣☘️☘️☘️是最輕量簡單方便的
(我覺得'波粉神似'好難念,連Google也都同意我的說法XD)

本日效果

叔叔是為了示範才用來存帳密,好孩子不要學喔
我絕對不會說公司專案也是這樣存的

說明

  1. 跟UserDefault用起來差不多,除了以下兩點⚠️⚠️⚠️
    1. 有file的概念,可以開很多個xml檔,不像我們只有一個.plist
    2. 要寫入要用另一個SharedPreferences.Editor類來處理
  2. 看code吧
//讀取
//本來是想用PreferenceManager的,但已經棄用就算了
SharedPreferences sharedPreferences = getSharedPreferences("user",MODE_PRIVATE);
//跟intent的getExtra一樣,第二個參數是預設值
String password = sharedPreferences.getString(usernameEditText.getText().toString(),"");
//寫入
SharedPreferences.Editor spEditor = sharedPreferences.edit();
spEditor.putString(usernameEditText.getText().toString(), passwordEditText.getText().toString());//Key-Value形式
spEditor.commit();
  1. 另外今天有用到startActivityForResult,如果是自己專案內的Activity要用回傳的話
    Intent intent = new Intent();
    intent.putExtra("isBackByLoginSuccess",true);
    setResult(Activity.RESULT_OK, intent);
    finish();

這樣對方的onActivityResult就會收到你的心意了(羞)
4. 還有用到字串比較,跟我們一樣不能直接用==☘️☘️☘️
建議使用TextUtils.equals("A字串","B字串")
因為他們用A字串.equals("B字串")的時候,如果A字串是null會閃退⚠️⚠️⚠️
5. 題外話:不知道為什麼我用到Toast最後都會忘記.show.....
6. 結論,今天的範例一樣是用內建的Activity Gallery生的
不過一個簡單的登入可以寫得這麼複雜我也是醉了

參考資料

今天的範例程式

可以去 https://github.com/mark33699/IDLA 看一下順便給顆⭐️


如果你喜歡我的影片別忘了按讚分享加訂閱,開啟紅色的小鈴鐺,我們明天見~


上一篇
iOS Developer Learning Android. Lesson 22 - Google Map (讀萬卷書、行萬里路)
下一篇
iOS Developer Learning Android. Lesson 24 - Room (不好的老師帶你住套房)
系列文
iOS Developer Learning Android30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言