手把手教你写软件3.登陆和注册

关于登陆和注册的xml很简单,就是两个editText和两个button,还有一个checkbox(是否记住我),就不再叙述了,我们主要来看如何实现。如图:这是用户登陆界面:

这是注册界面:
首先,我们要明白实现的是什么?

主线就是:点击注册按钮,进入注册界面,填写用户名,密码,确认密码,返回后正确填写用户名密码,然后点击登陆,跳转到登陆界面。
支线就比较复杂了。首先我们从注册界面说起:用户名不能为空,而且不能与之前的用户名重复。密码不能为空,密码与确认密码要一致,当然为了显得正规高级,你也可以设置密码不少于n位。然后到了用户界面,用户名应该是已经注册过的,密码应该是用户名所对应的那个。如果我们点击了记住我,那么下次登陆的时候应该要自动显示用户名密码。如果我们在输入过程中点击了记住我,我设置的是一旦选择了记住我,就把所记录的用户名和密码更新。一旦取消,就清除原来所有的数据。

好了,不要急,我们一步一步来实现。
1.在注册界面,当我们点击提交的时候,对用户名进行检查,以及对密码和确认密码进行比较,如果用户名重复,为空或密码和确认密码不等或都为空,都应该提示错误,并且无法完成注册。

实现方法:分别用arraylist将每次输入的用户名,和密码保存,然后调用一个java_class,对每次输入的用户名,密码进行检查。
那么问题来了,用户名和密码是在注册界面输入的,arraylist也是在注册界面申明的,怎么在登陆界面获得arraylist呢?这里有两种方法可以实现,1是将arraylist的值实现本地储存,2是将注册界面的值传入登陆界面。本地储存数据后面会用到,这里才刚开始就不多叙述,所以我们这里用到setResult(resultCode,intent)传输数据。解释一下,键值就好比是名字,根据名字找到对应的intent,相信这并不难理解。好了,上传代码一份,相信这样更好理解。
public class ResisterActivity extends AppCompatActivity {

    private EditText editName,editPsw,editPsw1;
    private Button btnSubmit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_resister);
        editName=(EditText)findViewById(R.id.editname);
        editPsw=(EditText)findViewById(R.id.editpsw);
        editPsw1=(EditText)findViewById(R.id.editpsw1);
        btnSubmit=findViewById(R.id.btnSubmit);
        btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name=editName.getText().toString();//获取用户名
                boolean res=check.result(name);//检查用户名是否合格
                String psw1=editPsw1.getText().toString();//获取重复密码
                String psw = editPsw.getText().toString();//获取密码
                if(psw.isEmpty()){ //判断密码是否为空
                    Toast.makeText(ResisterActivity.this,"密码为空,请输入密码",Toast.LENGTH_SHORT).show();
                }
                else if(res){
                    if(psw1.equals(psw)){  //判断密码是否等于重复密码
                        check.addString(name);
                    Intent intent = new Intent();
                    intent.putExtra("name", name); //键值为name所对应的数据为name,换句话说将用户名传递给intent
                    intent.putExtra("psw", psw);
                    intent.putExtra("psw1",psw1);
                    setResult(RESULT_OK, intent); //键值为RESULT_OK,调用它就可以获得intent里面的值
                    finish();
                    }
                    else
                        Toast.makeText(ResisterActivity.this,"与原密码不一致,请重新输入",Toast.LENGTH_SHORT).show();
                }
                 else{
                    Toast.makeText(ResisterActivity.this,"用户名重复",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
 
 
check检查:
public class check extends AppCompatActivity {
    public static ArrayList<String> list=new ArrayList<String>();
    public static boolean result(String name) {
        boolean res=true;
        int i,a=list.size();
        for(i=0;i<a;i++){
            if(list.get(i).equals(name)) {
                res = false;
                break;
            }
        }
       return res;
    }
    public static void addString(String name){
        list.add(name);
    }
}

好了,相信上面的代码不难理解,下面我们来实现登陆界面。

当我们点击注册的时候,因为需要返回数据,所以要用到可以返回数据的跳转接口

 
 
startActivityForResult(intent,requestCode)
当我们点击登陆的时候,应该要判断用户名或密码是否一致,所以没必要再去判断用户名或密码是否为空。这里我们要获得从注册界面传过来的数据,所以要用到接受数据函数
 
 
onActivityResult(int requestCode,int resultCode,Intent data)

好了,说了这么多,让我们来看看具体怎么实现的吧

public class LoginActivity extends AppCompatActivity {

    private EditText editName,editPsw,name,psw;
    private Button btnLogin,btnResiser;
    ArrayList<String> list1 = new ArrayList<String>();//保存用户名
    ArrayList<String> list2 = new ArrayList<String>();//保存密码
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode){
            case 1:  //与startActivityForResult的requestCode一致
                if(resultCode==RESULT_OK){ //与setResult的resultCode一致
                    String name=data.getStringExtra("name"); //根据键值name或者到数据name
                    String psw=data.getStringExtra("psw");
                      list1.add(name); //将name添加到用户名数组
                      list2.add(psw);
                }
                break;
            default:
        }
    }

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

     editName=(EditText) findViewById(R.id.editName);
     editPsw=(EditText)findViewById(R.id.editPsw);
     btnLogin=findViewById(R.id.btnLogin);
     btnLogin.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {       //点击登陆
             String editname=editName.getText().toString();//输入用户名
             String editpsw=editPsw.getText().toString(); //输入密码
             int a=list1.size();
             int i;
             for(i=0;i<a;i++){  
                 if(list1.get(i).equals(editname)&&list2.get(i).equals(editpsw)){ //如果输入的用户名和密码与保存的用户名和密码成功匹配
                     String data=editname;
                     Intent intent=new Intent(LoginActivity.this,IndexActivity.class);
                     intent.putExtra("data",data);
                     startActivity(intent);
                     break;
                 }
             }
             if(i==a)
             Toast.makeText(LoginActivity.this,"密码或用户名错误",Toast.LENGTH_SHORT).show();//弹出信息框
         }
     });
     btnResiser=findViewById(R.id.btnRisister);
     btnResiser.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {      //点击注册
             Intent intent=new Intent(LoginActivity.this,ResisterActivity.class);
             startActivityForResult(intent,1);
         }
     });

    }
}
好了,简单登陆和注册界面就完成了。或许细心的读者就会问,为什么没有讲解 “记住我”这个选择框,还有就是为什么下次登陆的时候原本注册的用户名和密码没有了。哈哈,不要急,因为这些都涉及到了数据的储存。现在才刚刚开始,等后面的项目用到的时候,我们在会过来继续完善,这里就先到此为止吧。

猜你喜欢

转载自blog.csdn.net/qq_37820491/article/details/80153862