安卓作业----慕课移动应用开发作业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;
    }
}

总结

如果有什么问题或改进方案,请私信联系我或者在评论区留言
码字不易,若有帮助,给个关注和赞呗

在这里插入图片描述

原创文章 54 获赞 176 访问量 3万+

猜你喜欢

转载自blog.csdn.net/baidu_41860619/article/details/106103802