智能管家---10. 用户登录功能实现(记住密码)

接下来实现用户登录功能,图解简要过程如下:
这里写图片描述

用户登录功能和用户注册功能实现过程大同小异,都是点击按钮以后获取用户输入的值,判断是否为空,如果不为空就存入user中,实现登录过程。

记住密码则是需要将用户输入的用户名密码存入数据库中,通过前面封装的SharedPreferences的各种put,get操作实现

  • 获取用户名和密码,实现登录操作
  • 初始化控件
    这里写图片描述
    这里写图片描述
  • 如果用户没有注册就先注册,跳转到注册页面,注册功能已经实现
    这里写图片描述
  • 登录过程
    这里写图片描述
  • 记住密码,如果用户输入信息之后退出,那么下次登录的时候是否再次输入信息取决于先前用户是否记住密码。如果没有记住密码则销毁先前输入的内容,否则就通过putString方法存入信息,在下次登录的时候,通过getString方法获取用户名和密码
    这里写图片描述

  • 当再次登录的时候,获取用户是否记住密码(putBoolean中通过key获取),如果为true,则说明记住密码,那么就可以通过name和pass的key来获取存入的用户名和密码,并且设置text,下次登录的时候就会显示
    这里写图片描述

  • 登录界面
    这里写图片描述

  • 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"
    android:gravity="center"
    android:padding="10dp">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher"/>

    <EditText
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="用户名"
        android:id="@+id/lo_name"/>

    <EditText
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lo_password"
        android:hint="密码"/>
    <CheckBox
        android:layout_marginTop="10dp"
        android:layout_marginLeft="126dp"
        android:text="记住密码"
        android:textColor="@color/colorAccent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/keep_pass"/>

    <Button
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/button_bg"
        android:text="登录"
        android:textColor="#ffffff"
        android:id="@+id/lo_login"/>

    <Button
        android:textColor="#ffffff"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/lo_registered"
        android:background="@drawable/button_bg"
        android:text="注册"/>

    <TextView
        android:layout_marginTop="10dp"
        android:layout_marginLeft="135dp"
        android:text="忘记密码?"
        android:textColor="@color/colorAccent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/forget_pass"/>


</LinearLayout>
  • LoginActivity的源代码:
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText et_name;
    private EditText et_pass;

    private Button btn_login;
    private Button btn_registerd;

    private CheckBox keep_pass;


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

        initView();
    }

    private void initView() {
        et_name=(EditText)findViewById(R.id.lo_name);
        et_pass=(EditText)findViewById(R.id.lo_password);
        btn_login=(Button)findViewById(R.id.lo_login);
        btn_login.setOnClickListener(this);
        btn_registerd=(Button)findViewById(R.id.lo_registered);
        btn_registerd.setOnClickListener(this);

        keep_pass=(CheckBox)findViewById(R.id.keep_pass);

        boolean isKeep=ShareUtils.getBoolean(this,"keeppass",false);//默认为false
        keep_pass.setChecked(isKeep);
        //true说明记住密码,则将用户名密码显示出来
        if(isKeep){
            String name=ShareUtils.getString(this,"username","");
            String password=ShareUtils.getString(this,"password","");
            et_name.setText(name);
            et_pass.setText(password);
        }

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.lo_registered:
                startActivity(new Intent(this,RegisteredActivity.class));
                break;
            case R.id.lo_login:
                String name=et_name.getText().toString().trim();
                String password=et_pass.getText().toString().trim();

                if(!TextUtils.isEmpty(name)&&!TextUtils.isEmpty(password)){

                    MyUSer myUSer=new MyUSer();
                    myUSer.setUsername(name);
                    myUSer.setPassword(password);

                    myUSer.login(new SaveListener<MyUSer>() {

                        @Override
                        public void done(MyUSer myUSer, BmobException e) {
                            if(e==null){
                                Toast.makeText(LoginActivity.this, "登录成功!", Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(LoginActivity.this, MainActivity.class));
                                finish();
                            }else{
                                Toast.makeText(LoginActivity.this, "登录失败!", Toast.LENGTH_SHORT).show();
                            }
                        }
                    });
                }
        }
    }


    //如果输入用户名密码后退出,看是否有记住密码
    @Override
    protected void onDestroy() {
        super.onDestroy();

        //保存当前是否点击的状态
        ShareUtils.putBoolean(this,"keeppass",keep_pass.isChecked());

        //如果选中则保存当前用户名密码
        if(keep_pass.isChecked()){
            ShareUtils.putString(this,"username",et_name.getText().toString().trim());
            ShareUtils.putString(this,"password",et_pass.getText().toString().trim());
        }else{
            //存入空
//            ShareUtils.putString(this,"username","");
//            ShareUtils.putString(this,"password","");
            //应该删除
            ShareUtils.delete(this,"username");
            ShareUtils.delete(this,"password");

        }
    }
}

猜你喜欢

转载自blog.csdn.net/ayangann915/article/details/81485925