您好,登錄后才能下訂單哦!
這篇“Android用SharedPreferences怎么實(shí)現(xiàn)登錄注冊注銷功能”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android用SharedPreferences怎么實(shí)現(xiàn)登錄注冊注銷功能”文章吧。
本文的注冊登錄邏輯如下:
1、注冊頁面:有賬號可以直接去登錄頁面。沒有賬號的話填寫賬號密碼,檢測賬號密碼不為空,點(diǎn)擊立即注冊,保存賬號信息,跳轉(zhuǎn)到登錄頁面。
2、登錄頁面:首先讀取緩存的賬號密碼和是否記住密碼,將賬號顯示,判斷記住密碼的標(biāo)志,為空或false,不顯示密碼,需要輸入密碼,為true則直接將緩存的密碼顯示,選擇是否記住密碼按鈕,將此狀態(tài)存入緩存,點(diǎn)擊登錄跳轉(zhuǎn)到主頁。
3、主頁:首先取緩存,判斷是否登錄,若沒有登錄跳轉(zhuǎn)到注冊頁面。點(diǎn)擊退出登錄,跳轉(zhuǎn)到注冊頁;(2)點(diǎn)擊注銷賬號,清除所有緩存,跳轉(zhuǎn)到注冊頁面。
1.布局界面
注冊頁面 activity_register.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="match_parent" android:layout_height="50dp" android:background="#AB2196F3" android:gravity="center" android:text="用戶注冊" android:textSize="20dp" android:textStyle="bold" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginRight="10dp" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:orientation="vertical"> <EditText android:id="@+id/reg_uname" android:layout_marginTop="40dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="帳號"/> <EditText android:id="@+id/reg_pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:inputType="textPassword" android:hint="密碼"/> <EditText android:id="@+id/reg_pwd2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:inputType="textPassword" android:hint="再次確認(rèn)密碼"/> <Button android:id="@+id/register_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="#AB2196F3" android:text="立即注冊"/> <Button android:id="@+id/register_toLogin_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:background="#AB2196F3" android:text="已有賬號?去登錄"/> </LinearLayout> </LinearLayout>
登錄界面 activity_login.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="match_parent" android:layout_height="50dp" android:background="#AB2196F3" android:gravity="center" android:text="用戶登錄" android:textSize="20dp" android:textStyle="bold" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="20dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="vertical"> <EditText android:id="@+id/login_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:hint="賬號"/> <EditText android:id="@+id/login_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密碼" android:inputType="textPassword" android:layout_margin="10dp"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp"> <CheckBox android:id="@+id/login_remember" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="記住密碼" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:clickable="true" android:onClick="register" android:textColor="#3F51B5" android:text="沒有賬號?立即注冊" /> </RelativeLayout> <Button android:id="@+id/login_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#AB2196F3" android:text="登錄" android:layout_margin="10dp"/> </LinearLayout> </LinearLayout>
主頁面
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="15dp" tools:context=".MainActivity"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="主頁!" android:textSize="30dp" android:layout_centerHorizontal="true" android:layout_alignParentTop="true"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="主頁內(nèi)容!" android:textSize="30dp" android:layout_marginTop="50dp" android:layout_below="@id/text" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:text="退出登錄" android:layout_alignParentBottom="true" android:onClick="Quit"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:text="注銷此賬號" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:onClick="zhuxiao"/> </RelativeLayout>
2.Activity 邏輯
注冊頁面的邏輯
package com.example.yuan; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; /** * Created by Yuan on 2020/8/6 17:08. * 包名: com.example.yuan * 類說明:注冊(按鈕的點(diǎn)擊事件直接使用 Activity 作為事件監(jiān)聽器) */ public class RegisterActivity extends AppCompatActivity implements View.OnClickListener { //獲取用戶名,昵稱,密碼,確認(rèn)密碼 private EditText reg_uname,reg_uname2,et_pwd,et_pwd2; //獲取用戶名,昵稱,密碼,確認(rèn)密碼的值 private String uname,pwd,pwd2; private SharedPreferences sp; private SharedPreferences.Editor editor; private Button btn_reg,btn_toLogin; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); init();//獲取界面控件 } //UI組件初始化與事件綁定 private void init(){ //UI組件初始化 reg_uname=findViewById(R.id.reg_uname); et_pwd=findViewById(R.id.reg_pwd); et_pwd2=findViewById(R.id.reg_pwd2); btn_toLogin=findViewById(R.id.register_toLogin_btn); btn_reg=findViewById(R.id.register_btn); //點(diǎn)擊事件綁定 btn_reg.setOnClickListener(this); btn_toLogin.setOnClickListener(this); } //點(diǎn)擊事件 @Override public void onClick(View v) { switch (v.getId()){ case R.id.register_btn: //獲取參數(shù) uname=reg_uname.getText().toString().trim(); pwd=et_pwd.getText().toString().trim(); pwd2=et_pwd2.getText().toString().trim(); //判斷 if(uname.equals("") || pwd.equals("") ){ Toast.makeText(RegisterActivity.this, "用戶名或密碼不能為空", Toast.LENGTH_SHORT).show(); return; }else if(!(pwd.equals(pwd2))){ Toast.makeText(RegisterActivity.this,"兩次輸入密碼不一致",Toast.LENGTH_SHORT).show(); }else { //loginInfo表示文件名 sp=getSharedPreferences("loginInfo", MODE_PRIVATE); //獲取編輯器 editor=sp.edit(); //存入注冊的用戶信息 editor.putString("username", uname); editor.putString("password",pwd); //提交修改 editor.commit(); Toast.makeText(RegisterActivity.this,"注冊成功",Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplicationContext(),LoginActivity.class)); } break; case R.id.register_toLogin_btn://跳轉(zhuǎn)到登錄頁面 startActivity(new Intent(getApplicationContext(),LoginActivity.class)); finish(); break; } } }
登錄頁面的邏輯
package com.example.yuan; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; /** * Created by Yuan on 2020/8/6 16:12. * 包名: com.example.yuan * 類說明:登錄 */ public class LoginActivity extends AppCompatActivity { private EditText et_uname,et_upwd;//獲取用戶名,密碼 private CheckBox isRemember; private Button login_btn; private String username,password,sp_name,sp_pwd; private Boolean sp_isRemember;//是否記住密碼的標(biāo)志 private Context mContext; private SharedPreferences sp; private SharedPreferences.Editor editor; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); init();//獲取界面控件 //讀取緩存數(shù)據(jù) sp=getSharedPreferences("loginInfo", MODE_PRIVATE); sp_name=sp.getString("username",""); sp_pwd=sp.getString("password",""); sp_isRemember=sp.getBoolean("isRemember",false); //如果有賬號,直接顯示 Log.d("TAG",sp_name); et_uname.setText(sp_name); //如果上次登錄記住了密碼,本次登錄直接設(shè)置上 if(sp_isRemember.equals(true)){ et_upwd.setText(sp_pwd); isRemember.setChecked(true); } mContext= LoginActivity.this; //登錄按鈕的點(diǎn)擊事件(直接用匿名內(nèi)部類) login_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //開始登錄,獲取輸入的用戶名和密碼 username = et_uname.getText().toString().trim(); password = et_upwd.getText().toString().trim(); // TextUtils.isEmpty判斷是否輸入 if (TextUtils.isEmpty(username)) { Toast.makeText(mContext, "請輸入手機(jī)號", Toast.LENGTH_SHORT).show(); } else if (TextUtils.isEmpty(password)) { Toast.makeText(mContext, "請輸入密碼", Toast.LENGTH_SHORT).show(); // 判斷,輸入的賬號密碼,是否與保存在SharedPreferences中一致 } else if (username.equals(sp_name) && password.equals(sp_pwd)) { //一致登錄成功 Toast.makeText(mContext, "登錄成功", Toast.LENGTH_SHORT).show(); //判斷記住密碼按鈕是否選中,選中則將isRemember設(shè)置為true,保存狀態(tài) sp=getSharedPreferences("loginInfo", MODE_PRIVATE); //獲取編輯器 editor=sp.edit(); if (isRemember.isChecked()) {//如果記住密碼選中,存入true,否則存入false editor.putBoolean("isRemember",true); }else { editor.putBoolean("isRemember",false); } editor.putBoolean("isLogin",true);//保存登錄狀態(tài) editor.apply();//提交修改 //登錄成功后關(guān)閉此頁面進(jìn)入主頁 //跳轉(zhuǎn)到主界面,登錄成功的狀態(tài)傳遞到 MainActivity 中 Intent intent=new Intent(getApplicationContext(),MainActivity.class); intent.putExtra("name",username); startActivity(intent); finish();//銷毀登錄界面 } else if ((sp_pwd != null && !TextUtils.isEmpty(sp_pwd) && !password.equals(sp_pwd))) { Toast.makeText(mContext, "輸入的用戶名和密碼不一致", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(mContext, "此用戶名不存在", Toast.LENGTH_SHORT).show(); } } }); } //獲取界面控件 private void init(){ et_uname=findViewById(R.id.login_username); et_upwd=findViewById(R.id.login_password); isRemember=findViewById(R.id.login_remember); login_btn=findViewById(R.id.login_btn); } //注冊按鈕的點(diǎn)擊事件(直接綁定在控件上) public void register(View view) { Intent intent=new Intent(getApplicationContext(),RegisterActivity.class); startActivity(intent); } }
主頁面的邏輯
package com.example.yuan; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textView=findViewById(R.id.text); Intent intent=getIntent(); String name=intent.getStringExtra("name"); sp=getSharedPreferences("loginInfo", MODE_PRIVATE); textView.setText("歡迎你,"+name); Boolean isLogin=sp.getBoolean("isLogin",false); if (!isLogin){ startActivity(new Intent(getApplicationContext(),RegisterActivity.class)); finish(); }else if(TextUtils.isEmpty(name)){ startActivity(new Intent(getApplicationContext(),LoginActivity.class)); finish(); } } public void Quit(View view) { sp=getSharedPreferences("loginInfo", MODE_PRIVATE); SharedPreferences.Editor editor=sp.edit(); editor.putBoolean("isLogin",false); editor.commit(); startActivity(new Intent(getApplicationContext(),RegisterActivity.class)); finish(); } /** * @param view */ public void zhuxiao(View view) { sp=getSharedPreferences("loginInfo", MODE_PRIVATE); SharedPreferences.Editor editor=sp.edit(); editor.clear(); editor.commit(); Toast.makeText(MainActivity.this,"注銷成功",Toast.LENGTH_SHORT).show(); startActivity(new Intent(getApplicationContext(),RegisterActivity.class)); finish(); } }
以上就是關(guān)于“Android用SharedPreferences怎么實(shí)現(xiàn)登錄注冊注銷功能”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。