溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Android用SharedPreferences怎么實(shí)現(xiàn)登錄注冊注銷功能

發(fā)布時(shí)間:2022-04-24 14:12:41 來源:億速云 閱讀:331 作者:iii 欄目:開發(fā)技術(shù)

這篇“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)到注冊頁面。

Android用SharedPreferences怎么實(shí)現(xiàn)登錄注冊注銷功能

Android用SharedPreferences怎么實(shí)現(xià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è)資訊頻道。

向AI問一下細(xì)節(jié)

免責(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)容。

AI