十天冲刺之四
?
?
?
?
?
延續昨天的學習進度,將登陸界面的注冊功能以及注冊界面進行了編寫,
?如圖布局:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!--register_icon_normal.png為按鈕不點擊的樣式,點擊顯示灰色圖片register_icon_selected.png--><item android:drawable="@drawable/register_icon_selected" android:state_pressed="true"/><item android:drawable="@drawable/register_icon_normal"/> </selector><?xml version="1.0" encoding="utf-8"?> <!--注冊界面--> <!--這里的布局是放置 1 個 ImageView 控件,用于顯示用戶頭像;3 個 EditText 控件,用于輸入用戶名、密碼、再次輸入密碼;1 個 Button 控件作為注冊按鈕--> <!--修改 activity_register.xml 為 LinearLayout 布局--> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_register"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/register_bg"android:orientation="vertical"><include layout="@layout/main_title_bar"></include><!--引入標題欄--><ImageViewandroid:layout_width="70dp"android:layout_height="70dp"android:layout_gravity="center_horizontal"android:layout_marginTop="25dp"android:src="@drawable/default_icon"/><!--三個編輯框--><EditTextandroid:id="@+id/et_user_name"android:layout_width="fill_parent"android:layout_height="48dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:layout_marginTop="35dp"android:background="@drawable/register_user_name_bg"android:drawableLeft="@drawable/user_name_icon"android:drawablePadding="10dp"android:gravity="center_vertical"android:hint="請輸入用戶名"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><EditTextandroid:id="@+id/et_psw"android:layout_width="fill_parent"android:layout_gravity="center_horizontal"android:layout_height="48dp"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:background="@drawable/register_psw_bg"android:drawableLeft="@drawable/psw_icon"android:drawablePadding="10dp"android:hint="請輸入密碼"android:inputType="textPassword"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><EditTextandroid:id="@+id/et_psw_again"android:layout_width="fill_parent"android:layout_height="48dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:background="@drawable/register_psw_again_bg"android:drawableLeft="@drawable/psw_icon"android:drawablePadding="10dp"android:hint="請再次輸入密碼"android:inputType="textPassword"android:paddingLeft="8dp"android:singleLine="true"android:textColor="#000000"android:textColorHint="#a3a3a3"android:textSize="14sp"/><Buttonandroid:id="@+id/btn_register"android:layout_width="fill_parent"android:layout_height="40dp"android:layout_gravity="center_horizontal"android:layout_marginLeft="35dp"android:layout_marginRight="35dp"android:layout_marginTop="15dp"android:background="@drawable/register_selector"android:text="注 冊"android:textColor="@android:color/white"android:textSize="18sp"/> </LinearLayout>
?在實現注冊功能上,出現了一些問題,通過網上資料的查詢,確定了使用MD5加密算法,簡單來說就是吧任意長度的字符串變成固定長度(通常是128位)的十六進制字符串。
public static String md5(String text){MessageDigest digest = null;try {//獲取數據指紋對象digest = MessageDigest.getInstance("md5");//字節數組byte[] result = digest.digest(text.getBytes());//16進制轉換StringBuffer sb = new StringBuffer();//獲取所有字節進行轉換for (byte b: result){//使用『與算法』,java使用unicode字符,所以每個字符占位兩個// 需要與兩位16進制最大值進行與運算,獲取number值int number = b & 0xff;//number值轉換字符串String hex = Integer.toHexString(number);if (hex.length() == 1){//若轉換后的字符長度等于1則進行字符串拼接sb.append("0"+hex);}else {sb.append(hex);}}return sb.toString();} catch (NoSuchAlgorithmException e) {e.printStackTrace();//發送異常return空字符串return "";}}
聲明相應的控件屬性,如:標題和一些按鈕的屬性
//標題 private TextView tv_main_title; //返回按鈕 private TextView tv_back; //注冊按鈕 private Button btn_register; //用戶名,密碼,再次輸入的密碼的控件 private EditText et_user_name,et_psw,et_psw_again; //用戶名,密碼,再次輸入的密碼的控件的獲取值 private String userName,psw,pswAgain; //標題布局 private RelativeLayout rl_title_bar;在RegisterAcitivity中創建界面控件的初始化方法init(),用于獲取注冊界面鎖要用到的控件以及實現控件的點擊事件。注意有兩個私有類方法getEditString()和isExistUserName(String userName)寫在init()后面的。
private void init() {//從main_title_bar.xml 頁面布局中獲取對應的UI控件tv_main_title=findViewById(R.id.tv_main_title);tv_main_title.setText("注冊");tv_back=findViewById(R.id.tv_back);//布局根元素rl_title_bar=findViewById(R.id.title_bar);rl_title_bar.setBackgroundColor(Color.TRANSPARENT);//從activity_register.xml 頁面中獲取對應的UI控件btn_register=findViewById(R.id.btn_register);et_user_name=findViewById(R.id.et_user_name);et_psw=findViewById(R.id.et_psw);et_psw_again=findViewById(R.id.et_psw_again);tv_back.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//返回鍵RegisterActivity.this.finish();}});//注冊按鈕btn_register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//獲取輸入在相應控件中的字符串getEditString();//判斷輸入框內容if(TextUtils.isEmpty(userName)){Toast.makeText(RegisterActivity.this, "請輸入用戶名", Toast.LENGTH_SHORT).show();return;}else if(TextUtils.isEmpty(psw)){Toast.makeText(RegisterActivity.this, "請輸入密碼", Toast.LENGTH_SHORT).show();return;}else if(TextUtils.isEmpty(pswAgain)){Toast.makeText(RegisterActivity.this, "請再次輸入密碼", Toast.LENGTH_SHORT).show();return;}else if(!psw.equals(pswAgain)){Toast.makeText(RegisterActivity.this, "輸入兩次的密碼不一樣", Toast.LENGTH_SHORT).show();return;/***從SharedPreferences中讀取輸入的用戶名,判斷SharedPreferences中是否有此用戶名*/}else if(isExistUserName(userName)){Toast.makeText(RegisterActivity.this, "此賬戶名已經存在", Toast.LENGTH_SHORT).show();return;}else{Toast.makeText(RegisterActivity.this, "注冊成功", Toast.LENGTH_SHORT).show();//把賬號、密碼和賬號標識保存到sp里面/*** 保存賬號和密碼到SharedPreferences中*/saveRegisterInfo(userName, psw);//注冊成功后把賬號傳遞到LoginActivity.java中// 返回值到loginActivity顯示Intent data = new Intent();data.putExtra("userName", userName);setResult(RESULT_OK, data);//RESULT_OK為Activity系統常量,狀態碼為-1,//表示此頁面下的內容操作成功將data返回到上一頁面,如果是用back返回過去的則不存在用setResult傳遞data值RegisterActivity.this.finish();}}});}/*** 獲取控件中的字符串*/private void getEditString(){userName=et_user_name.getText().toString().trim();psw=et_psw.getText().toString().trim();pswAgain=et_psw_again.getText().toString().trim();}/*** 從SharedPreferences中讀取輸入的用戶名,判斷SharedPreferences中是否有此用戶名*/private boolean isExistUserName(String userName){boolean has_userName=false;//mode_private SharedPreferences sp = getSharedPreferences( );// "loginInfo", MODE_PRIVATESharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);//獲取密碼String spPsw=sp.getString(userName, "");//傳入用戶名獲取密碼//如果密碼不為空則確實保存過這個用戶名if(!TextUtils.isEmpty(spPsw)) {has_userName=true;}return has_userName;}
?
轉載于:https://www.cnblogs.com/fly1234/p/10873060.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: QT. 学习之路 一
- 下一篇: Keepalived+Nginx 实现双