安卓作業----慕課移動應用開發作業20之使用SharedPreference實現簡單註冊登陸邏輯

本篇使用SharedPreference,實現簡單的註冊登陸界面

同時這也是中國大學慕課移動終端應用開發的網課作業20
原題目要求:
(1)通過“註冊”按鈕,跳轉到“註冊”界面輸入用戶名和密碼。
(2)點擊“登錄”按鈕,匹配已“註冊”的用戶名和“密碼”,用戶名和密碼正確與否,用Toast進行信息提示。

說明

1.有關SharedPreference的學習,建議大家閱讀此篇博客:Android中SharedPreference的用法
2.由於需要存儲複雜類型對象列表,我的解決方案是將List對象轉換爲json對象再進行的存儲。使用的是fastjson。
3.能實現判斷用戶註冊是否重複,允許輸入正確口令的用戶登陸等簡單功能。
4.功能簡單,僅作參考

代碼

包含兩個Activity及對應佈局和一個User對象

1.添加依賴

由於使用的是阿里巴巴的fastjson,所以得先build.gradle文件中添加對fastjson的依賴

 implementation 'com.alibaba:fastjson:1.2.10'
2.MainActivity.java
public class MainActivity extends AppCompatActivity {
    private EditText mEditTextName,mEditTextPassword;
    private Button mButtonRegister,mButtonLogin;
    private ArrayList<User> mUsers = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();

        mButtonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = mEditTextName.getText().toString();
                String password = mEditTextPassword.getText().toString();

                if (!name.equals("")&&!password.equals("")){
                    User user = new User(name,password);
                    mUsers = read();//獲取已經註冊的集合
                    if (!judge(user)){//如果不存在
                        Toast.makeText(MainActivity.this,"用戶名或密碼錯誤",Toast.LENGTH_SHORT).show();
                    }else {
                        Toast.makeText(MainActivity.this,"登陸成功,歡迎您",Toast.LENGTH_LONG).show();
                    }

                }else {
                    Toast.makeText(MainActivity.this,"用戶名或密碼爲空",Toast.LENGTH_SHORT).show();
                }
            }
        });

        mButtonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(RegisterActivity.createIntent(MainActivity.this));
            }
        });
    }

    private void init(){
        mEditTextName = findViewById(R.id.login_edit_name);
        mEditTextPassword = findViewById(R.id.login_edit_password);
        mButtonLogin = findViewById(R.id.login_button_login);
        mButtonRegister = findViewById(R.id.login_button_register);
    }

    /**
     * 判斷user的用戶名密碼是否匹配
     * */
    private boolean judge(User user){
        boolean flag = false;
        for (User u:mUsers){
            //用戶名與密碼相互匹配
            if (user.name.equals(u.name)&&user.password.equals(u.password)){
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 讀取數據
     * */
    private ArrayList<User> read(){
        //只允許本應用讀取
        SharedPreferences mSharedPreferences = getSharedPreferences("userLoginInfo",MODE_PRIVATE);
        String json = mSharedPreferences.getString("data","");
        ArrayList<User> users = new ArrayList<>();
        if (!json.equals("")){
            users = (ArrayList<User>) JSON.parseArray(json,User.class);
        }
        return users;
    }
}
3.對應的主佈局文件 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">
        <TextView
            android:layout_width="60dp"
            android:layout_marginLeft="10dp"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:text="賬號:"/>
        <EditText
            android:id="@+id/login_edit_name"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">
        <TextView
            android:layout_width="60dp"
            android:layout_marginLeft="10dp"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:text="密碼:" />
        <EditText
            android:id="@+id/login_edit_password"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:inputType="textPassword"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="20dp">
        <Button
            android:id="@+id/login_button_register"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="註冊"/>
        <Button
            android:id="@+id/login_button_login"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:text="登陸"/>
    </LinearLayout>
</LinearLayout>
4.RegisterActivity.java
public class RegisterActivity extends AppCompatActivity {
    private EditText mEditTextName,mEditTextPassword;
    private Button mButtonRegister;
    private ArrayList<User> mUsers = new ArrayList<>();
    //只允許本應用讀取

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        init();

        mButtonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = mEditTextName.getText().toString();
                String password = mEditTextPassword.getText().toString();

                if (!name.equals("")&&!password.equals("")){
                    User user = new User(name,password);
                    mUsers = read();//獲取已經註冊的集合
                    if (!judge(user)){//如果不存在
                        mUsers.add(user);
                        write(mUsers);
                        Toast.makeText(RegisterActivity.this,"註冊成功快去登陸吧",Toast.LENGTH_LONG).show();
                    }else {
                        Toast.makeText(RegisterActivity.this,"用戶名已經存在",Toast.LENGTH_SHORT).show();
                    }

                }else {
                    Toast.makeText(RegisterActivity.this,"用戶名或密碼爲空",Toast.LENGTH_SHORT).show();
                }

            }
        });
    }

    private void init(){
        mEditTextName = findViewById(R.id.register_edit_name);
        mEditTextPassword = findViewById(R.id.register_edit_password);
        mButtonRegister = findViewById(R.id.register_button_register);
    }

    /**
     * 判斷user是否已經在list裏了
     * */
    private boolean judge(User user){
        boolean flag = false;
        for (User u:mUsers){
            //用戶名重複
            if (user.name.equals(u.name)){
                flag = true;
            }
        }
        return flag;
    }

    /**
     * 讀取數據
     * */
    private ArrayList<User> read(){
        SharedPreferences mSharedPreferences = getSharedPreferences("userLoginInfo",MODE_PRIVATE);
        String json = mSharedPreferences.getString("data","");
        ArrayList<User> users = new ArrayList<>();
        if (!json.equals("")){
            users = (ArrayList<User>) JSON.parseArray(json,User.class);
        }
        return users;
    }

    /**
     * 寫入數據
     * */
    private void write(ArrayList<User> users){
        SharedPreferences mSharedPreferences = getSharedPreferences("userLoginInfo",MODE_PRIVATE);
        SharedPreferences.Editor mEdit = mSharedPreferences.edit();
        String json = JSON.toJSONString(users);
        mEdit.putString("data",json);
        mEdit.commit();
    }

    //打開自己的方法
    public static Intent createIntent(Context context){
        return new Intent(context,RegisterActivity.class);
    }
}

5.對應佈局文件 activity_register.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">
        <TextView
            android:layout_width="60dp"
            android:layout_marginLeft="10dp"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:text="賬號:"/>
        <EditText
            android:id="@+id/register_edit_name"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">
        <TextView
            android:layout_width="60dp"
            android:layout_marginLeft="10dp"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:text="密碼:" />
        <EditText
            android:id="@+id/register_edit_password"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"
            android:inputType="textPassword"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:layout_marginTop="20dp"
        android:orientation="vertical">
        <Button
            android:id="@+id/register_button_register"
            android:layout_width="100dp"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:text="註冊"/>
    </LinearLayout>
</LinearLayout>
6.User.java

注意得實現Serializable接口

import java.io.Serializable;

public class User implements Serializable {
    public String name;
    public String password;

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

總結

如果有什麼問題或改進方案,請私信聯繫我或者在評論區留言
碼字不易,若有幫助,給個關注和讚唄

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章