過了這么久了,看看自己的園齡都17天了,一直在總結,從未缺席,我還是很開心的,踏踏實實的完成自己能學到的。
今天學習SP
SP:全稱SharedPreferences,別問我為啥知道,因為打了好多遍了,哈哈,這個東西你可以認為它可以給你的項目存儲一些輕量級的數據放到一個文件。
就拿我們今天的例子來說,我們用SP實現輸入用戶和昵稱,通過復選框CheckBox監聽,判斷是否記住密碼,而記住密碼的這個操作,就是把用戶,密碼,以及是否選擇了這個復選框的情況用一個文件存進去。
我當時的理解就是創建一個類似數據庫的小文件,要取的話就用鍵值對去取出來。
alpha的作用就是給圖片設置透明度,其他的都是簡單的布局控件。
現在布局的基本套路確定了,就是使用線性布局和幀布局以及權重的套用,就基本能寫出自己想要的布局了。
權重就是weight那個
和布局搭配使用,就拿線性布局來說,線性布局有水平和垂直,如果是水平方向添加權重,那么它的高就要設置為0dp
這是因為我們設置水平方向權重的話是改變高,那么就不用設置高了。
然后就是Gravity了,如果是Layout_gravity就是針對它本身在父布局中的位置
gravity就是對於它內部子布局的位置
布局代碼是上面這邊;
下面的是主活動的代碼
學到了一個根據布局生成代碼的好東西;
LayoutCreator
這里面的這三個方法都是自動生成的,這樣寫起來是不是很棒,有點偷懶了。
https://www.jianshu.com/p/46d0f191178f
效果就是
這個界面是剛啟動的界面,為啥會有賬戶和密碼,這就是SP它的作用了,
只要監聽你勾選了記住密碼,即使你結束了程序,下次啟動還是會加載你記住的密碼。
我覺得還比較簡單。
然后這邊解釋下核心代碼吧:
username = findViewById(R.id.username); 輸入賬戶的
password= findViewById(R.id.password); 輸入密碼的
CheckBox checkBox=findViewById(R.id.remember); 復選框
Button log_in=findViewById(R.id.login); 登錄按鈕
Button register=findViewById(R.id.register); 注冊按鈕
log_in.setOnClickListener(this); 設置監聽,為啥監聽里面是this,因為監聽有兩種方法,一種是遍歷實現,一種是讓類實現,
這就是讓類實現,就是讓類implements視圖監聽,然后實現它的OnClick方法
final SharedPreferences sp=this.getSharedPreferences("log5.25",MODE_PRIVATE);
這邊就是創建SP,如果說有這個文件就調用,沒得就自己創建,第一個參數是文件名,第二個參數是模式,默認是隱私,其他很多被棄用了,就只用這個吧
String StringUser=sp.getString("usernameString","");這就相當於鍵值對,用get第一個參數為鍵,后面的第二個就是沒找到這個鍵,默認返回的字符串
String StringPassword=sp.getString("passwordString","");
Boolean isChecked=sp.getBoolean("isChecked",false); 這個也是一樣,只不過它是Boolean的數據,所以默認返回值是false
username.setText(StringUser); 既然取出來了,就給它寫到賬戶,密碼,
password.setText(StringPassword);
checkBox.setChecked(isChecked); 這邊也是寫入復選框
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
接着就是給復選框設置監聽,
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.d("this", isChecked + "");
SharedPreferences.Editor editor = sp.edit(); 這個就是調用SP的編輯器
String usernameString = username.getText().toString().trim(); 然后把我們在賬戶和密碼輸入的東西存下來
String passwordString = password.getText().toString().trim();trim在java中是去兩端多余空格的
if(isChecked)如果它勾選了那個復選框
{
editor.putString("usernameString",usernameString);就把數據寫到那個文件
editor.putString("passwordString", passwordString);
editor.putBoolean("isChecked", isChecked);
editor.commit();最后提交,提交有兩種常用方式apply和commit,一個異步一個同步
異步就是編輯的時候一句話一句話寫
同步就是等到執行到commit語句,把記錄要寫的東西一口氣寫進去(同步不適合大量數據存儲,不然存入時會卡頓,影響用戶體驗)
}
else{
editor.clear().commit(); 這邊就是,如果你都沒勾選記住密碼,那么就清除文件里的數據,不然下次開啟還是會記住密碼。
}
}
});
提醒的是活動里自動生成時寫的submit方法,它的作用很簡單吧,就是看你輸入東西沒,然后輸入的是不是合格的,
不然就不給你跳其他活動去。
因為本牛崽這邊還寫了個活動Main2Activity,用來展示登錄成功的。
今天的內容就到這,總體來說還是比較簡單的。
創建視圖,獲取SP,創建SP文件,然后用鍵得到值
再創建復選框監聽,存入鍵值對
這一天天的,今天體育考核,終於明白了一個道理“一鼓作氣,再而衰,三而竭”
做俯卧撐,第一次做的好像不太好看,但是做的個數挺足;就第二次,第二次感覺手酸了,沒做到合格;休息了會,第三次,顫抖的做完,勉勉強強吧。
巔峰時刻可能還是首秀,所以不要拿自己人生的首秀開玩笑,有可能那就是巔峰。