上一篇文章我們已經將登入與註冊界面和按鈕功能做齊全了,接下來就要加入SharedPreferences方法,在註冊時設定傳入的資料,登入時則抓取這些資料,與輸入的資料進行比對。今天我們就來實作簡易的註冊功能。
首先,我們一樣先建立一個註冊頁面的shpf,這裡放入抓取和設定的方法。
public class enrollShpf {
private static String Data="Data";
private SharedPreferences shpf;
private Context context;
public enrollShpf(Context context){
this.context=context;
shpf=this.context.getSharedPreferences(String.valueOf(R.string.app_name), Context.MODE_PRIVATE);
}
//設定資料
public void setData(String data){
shpf.edit().putString(Data,data).apply();
}
//抓取資料
public String getData(){
return shpf.getString(Data,"");
}
}
完成之後,我們到註冊的程式:
新增物件:
enshpf = new enrollShpf(this);
加入函式:
public void setDataOnClick() {
//將帳號與密碼字串相連,並寫入
enshpf.setData(String.valueOf(tveEmail.getText().toString()+tvePass.getText().toString()));
}
在註冊完成按鈕的程式碼中加入:
setDataOnClick();
然後是登入的程式:
新增物件:
enshpf = new enrollShpf(this);
在登入按鈕的程式碼中加入判斷:
if((tvEmail.getText().toString()+tvPass.getText().toString()).equals(enshpf.getData()))
{
Toast.makeText(login.this, "登入成功!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(login.this, MainActivity.class);
startActivity(intent);
}
else
{
Toast.makeText(login.this, "請輸入有效的帳號密碼,若忘記請重新註冊", Toast.LENGTH_SHORT).show();
}
至此,整個登入系統才算是完整了。
下面附上登入和註冊的所有程式碼:
login:
public class login extends AppCompatActivity {
private enrollShpf enshpf;
private Button btLogin,btClear,btEnroll;
private EditText tvEmail,tvPass;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btLogin=findViewById(R.id.button3);
btClear=findViewById(R.id.button);
btEnroll=findViewById(R.id.button4);
tvEmail=findViewById(R.id.editTextTextEmailAddress);
tvPass=findViewById(R.id.editTextTextPassword);
btClear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//將帳號密碼設為空字串
tvEmail.setText("");
tvPass.setText("");
}
});
btLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//判斷輸入的是否與註冊的帳號密碼一致,是則跳轉至主畫面
if((tvEmail.getText().toString()+tvPass.getText().toString()).equals(enshpf.getData()))
{
Toast.makeText(login.this, "登入成功!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setClass(login.this, MainActivity.class);
startActivity(intent);
}
else
{
Toast.makeText(login.this, "請輸入有效的帳號密碼,若忘記請重新註冊", Toast.LENGTH_SHORT).show();
}
}
});
btEnroll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//跳轉頁面至註冊頁面
Intent intent = new Intent();
intent.setClass(login.this, enroll.class);
startActivity(intent);
}
});
enshpf = new enrollShpf(this);
}
}
enroll:
public class enroll extends AppCompatActivity {
private enrollShpf enshpf;
private Button btCancel,btSent,btPass;
private EditText tveEmail,tvePass,tvePass2;
private CheckBox checkBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_enroll);
btCancel=findViewById(R.id.button5);
btSent=findViewById(R.id.button2);
btPass=findViewById(R.id.button6);
tveEmail=findViewById(R.id.editTextTextEmailAddress2);
tvePass=findViewById(R.id.editTextTextPassword4);
tvePass2=findViewById(R.id.editTextTextPassword2);
checkBox=findViewById(R.id.checkBox);
btSent.setEnabled(false);
checkBox.setEnabled(false);
btCancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//關閉頁面
finish();
}
});
btPass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(tveEmail.getText().toString().equals(""))
{
Toast.makeText(enroll.this, "請輸入帳號", Toast.LENGTH_SHORT).show();
}
else
{
if(tvePass.getText().toString().equals(""))
{
Toast.makeText(enroll.this, "請輸入密碼", Toast.LENGTH_SHORT).show();
}
else
{
if(tvePass.getText().toString().equals(tvePass2.getText().toString()))
{
checkBox.setEnabled(true);
Toast.makeText(enroll.this, "密碼驗證成功!", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(enroll.this, "密碼驗證失敗,請輸入相同之密碼", Toast.LENGTH_SHORT).show();
tvePass2.setText("");
checkBox.setEnabled(false);
checkBox.setChecked(false);
}
}
}
}
});
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
btSent.setEnabled(b);
}
});
btSent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//設定資料,關閉頁面
setDataOnClick();
finish();
}
});
enshpf = new enrollShpf(this);
}
public void setDataOnClick() {
//將帳號與密碼字串相連,並寫入
enshpf.setData(String.valueOf(tveEmail.getText().toString()+tvePass.getText().toString()));
}
}
今天的實作就到這邊,下一篇文章我們將結合之前的API配合氣象局開放平台,做出簡易的各縣市氣溫查詢系統~~