前文:
桃詞典 Peach Dictionary 簡易英語詞典app開發 安卓軟體開發 Part 4
導航:
桃詞典 Peach Dictionary 簡易英語詞典app開發 安卓軟體開發 The End 導航頁及收尾作業
3.實作登錄功能
(1)新建一個暫時用來驗證登錄成功的empty activity,這里我命名為temp(后期將會替換),
(2)添加一個矢量圖,與前面的對應,用來顯示/隱藏密碼,
ic_baseline_visibility_off_24
代碼:
MainActivity.java
package com.example.peachdictionary;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ActivityInfo;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.text.method.TransformationMethod;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import android.widget.VideoView;
public class MainActivity extends AppCompatActivity {
private ImageButton btn_login;//登錄按鈕
private String userName, psw, spPsw;//獲取的用戶名,密碼,加密密碼
private EditText et_user_name, et_psw;//編輯框
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//設定此界面為豎屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
videobackground();
}
private void videobackground() {
//視頻背景
final VideoView videoview = findViewById(R.id.video_background);
final String videopath = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.background).toString();
videoview.setVideoPath(videopath);
videoview.start();
videoview.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setLooping(true);
}
});
videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
videoview.setVideoPath(videopath);
videoview.start();
}
});
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, register.class);
startActivity(intent);
}
});
EditText edPassword = findViewById(R.id.editTextTextPassword);
ImageButton imageButton = findViewById(R.id.imageButton);
//密碼的隱藏和顯示
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TransformationMethod type = edPassword.getTransformationMethod();
if (PasswordTransformationMethod.getInstance().equals(type)) {
edPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
imageButton.setImageResource(R.drawable.ic_baseline_visibility_off_24);
} else {
edPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
// edPassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
imageButton.setImageResource(R.drawable.ic_baseline_visibility_24);
}
}
});
/*
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
if(pref.getString("login",null)==null){
editor.putString("login","1");
editor.commit();
}
SharedPreferences.Editor editor2 = getSharedPreferences("data",MODE_PRIVATE).edit();
SharedPreferences pref2 = getSharedPreferences("data",MODE_PRIVATE);
if(pref2.getString("login","").equals("2")){
startActivity(new Intent(MainActivity.this,temp.class));
finish();
}
*/
et_user_name = findViewById(R.id.editTextTextPersonName5);
et_psw = findViewById(R.id.editTextTextPassword);
btn_login = findViewById(R.id.imageButton4);
//登錄按鈕的點擊事件
btn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//開始登錄,獲取用戶名和密碼 getText().toString().trim();
userName = et_user_name.getText().toString().trim();
psw = et_psw.getText().toString().trim();
//對當前用戶輸入的密碼進行MD5加密再進行比對判斷, MD5Utils.md5( ); psw 進行加密判斷是否一致
String md5Psw = register.MD5Util.encrypt(psw);
// md5Psw ; spPsw 為 根據從SharedPreferences中用戶名讀取密碼
// 定義方法 readPsw為了讀取用戶名,得到密碼
spPsw = readPsw(userName);
// TextUtils.isEmpty
if (TextUtils.isEmpty(userName)) {
Toast.makeText(MainActivity.this, "請輸入用戶名", Toast.LENGTH_SHORT).show();
return;
} else if (TextUtils.isEmpty(psw)) {
Toast.makeText(MainActivity.this, "請輸入密碼", Toast.LENGTH_SHORT).show();
return;
// md5Psw.equals(); 判斷,輸入的密碼加密后,是否與保存在SharedPreferences中一致
} else if (md5Psw.equals(spPsw)) {
//editor2.putString("login","2");
// editor2.commit();
//一致登錄成功
Toast.makeText(MainActivity.this, "登錄成功", Toast.LENGTH_SHORT).show();
//保存登錄狀態,在界面保存登錄的用戶名 定義個方法 saveLoginStatus boolean 狀態 , userName 用戶名;
saveLoginStatus(true, userName);
//登錄成功后關閉此頁面進入主頁
Intent data = new Intent();
//datad.putExtra( ); name , value ;
data.putExtra("isLogin", true);
//RESULT_OK為Activity系統常量,狀態碼為-1
// 表示此頁面下的內容操作成功將data回傳到上一頁面,如果是用back回傳過去的則不存在用setResult傳遞data值
setResult(RESULT_OK, data);
//銷毀登錄界面
MainActivity.this.finish();
//跳轉到主界面,登錄成功的狀態傳遞到 MainActivity 中
startActivity(new Intent(MainActivity.this, temp.class));
return;
} else if ((spPsw != null && !TextUtils.isEmpty(spPsw) && !md5Psw.equals(spPsw))) {
Toast.makeText(MainActivity.this, "輸入的用戶名和密碼不一致", Toast.LENGTH_SHORT).show();
return;
} else {
Toast.makeText(MainActivity.this, "此用戶名不存在", Toast.LENGTH_SHORT).show();
}
}
});
}
/**
* 從SharedPreferences中根據用戶名讀取密碼
*/
private String readPsw(String userName) {
//getSharedPreferences("loginInfo",MODE_PRIVATE);
//"loginInfo",mode_private; MODE_PRIVATE表示可以繼續寫入
SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
//sp.getString() userName, "";
return sp.getString(userName, "");
}
/**
* 保存登錄狀態和登錄用戶名到SharedPreferences中
*/
private void saveLoginStatus(boolean status, String userName) {
//saveLoginStatus(true, userName);
//loginInfo表示檔案名 SharedPreferences sp=getSharedPreferences("loginInfo", MODE_PRIVATE);
SharedPreferences sp = getSharedPreferences("loginInfo", MODE_PRIVATE);
//獲取編輯器
SharedPreferences.Editor editor = sp.edit();
//存入boolean型別的登錄狀態
editor.putBoolean("isLogin", status);
//存入登錄狀態時的用戶名
editor.putString("loginUserName", userName);
//提交修改
editor.commit();
}
/**
* 注冊成功的資料回傳至此
*
* @param requestCode 請求碼
* @param resultCode 結果碼
* @param data 資料
*/
@Override
//顯示資料, onActivityResult
//startActivityForResult(intent, 1); 從注冊界面中獲取資料
//int requestCode , int resultCode , Intent data
// LoginActivity -> startActivityForResult -> onActivityResult();
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//super.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
//是獲取注冊界面回傳過來的用戶名
// getExtra().getString("***");
String userName = data.getStringExtra("userName");
if (!TextUtils.isEmpty(userName)) {
//設定用戶名到 et_user_name 控制元件
et_user_name.setText(userName);
//et_user_name控制元件的setSelection()方法來設定游標位置
et_user_name.setSelection(userName.length());
}
}
}
}
其中
/*
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
SharedPreferences pref = getSharedPreferences("data",MODE_PRIVATE);
if(pref.getString("login",null)==null){
editor.putString("login","1");
editor.commit();
}
SharedPreferences.Editor editor2 = getSharedPreferences("data",MODE_PRIVATE).edit();
SharedPreferences pref2 = getSharedPreferences("data",MODE_PRIVATE);
if(pref2.getString("login","").equals("2")){
startActivity(new Intent(MainActivity.this,temp.class));
finish();
}
*/
//editor2.putString("login","2");
// editor2.commit();
此段用于檢測是否為第一次登錄,當不是第一次登錄時,會跳過登錄界面,直接進入應用,不過感覺這種寫法還是有缺陷,希望有大佬能夠改進一下吧,
實作效果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/386631.html
標籤:其他
