Android记账本开发(二):实现注册登录功能

今天的工作是实现了注册登录功能。

根据逻辑,启动app时就运行,只有成功登录才跳入主界面,但支持注册功能,注册成功则可登录。

首先创建LoginActivity,登录应该由数据库中存储的用户名密码实现,但数据库还未编写,这里则提前设置账号密码,只为实现简单的登录功能。

这是Login前台的代码实现,activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:gravity="center_horizontal"
    android:orientation="vertical"
    tools:context=".activity.LoginActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#2196F3"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            app:srcCompat="@drawable/default_user_logo" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="50dp"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textView2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="用户昵称:" />

        <EditText
            android:id="@+id/editTextName"
            android:layout_width="match_parent"
            android:layout_height="58dp"
            android:ems="10"
            android:inputType="textPersonName"
            android:text="" />

        <TextView
            android:id="@+id/textViewPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="密码:" />

        <EditText
            android:id="@+id/editTextPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPassword"
            android:text="" />

        <Button
            android:id="@+id/buttonLogin"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="20dp"
        android:layout_marginRight="5dp">
        <TextView
            android:id="@+id/textView3"
            android:layout_height="wrap_content"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:text="" />

        <TextView
            android:id="@+id/textViewRegister"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:text="@string/login_register"
            android:textColor="@color/colorPrimaryDark" />
    </LinearLayout>

</LinearLayout>

效果如下:

需要为注册用户添加调转的事件监听器到RegisterActivity去注册用户,在该Activity中编写跳转代码即可,如下:

package com.example.thorineaccount.activity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.thorineaccount.MainActivity;
import com.example.thorineaccount.R;

/**
 * A login screen that offers login via email/password.
 */
public class LoginActivity extends AppCompatActivity {
    Button btnLogin;
    EditText editTextName,editTextPwd;
    TextView textViewRegister;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        btnLogin=(Button) this.findViewById(R.id.buttonLogin);
        editTextName=(EditText)this.findViewById(R.id.editTextName);
        editTextPwd=(EditText)this.findViewById(R.id.editTextPassword);
        textViewRegister=(TextView)this.findViewById(R.id.textViewRegister);
        btnLogin.setOnClickListener(new View.OnClickListener() {//实现登录功能
            @Override
            public void onClick(View view) {
                login();
            }
        });
        textViewRegister.setOnClickListener(new View.OnClickListener() {//实现注册功能
            @Override
            public void onClick(View view) {
                register();
            }
        });

    }

    private void register()//跳转到注册页面
    {
        Intent intent=new Intent();
        intent.setClass(this,RegisterActivity.class);
        startActivity(intent);
    }

    private void login()//登录校准
    {
        String name=editTextName.getText().toString();
        String pwd=editTextPwd.getText().toString();
        if(name.equals("admin") && pwd.equals("admin"))
        {
            Intent intent = new Intent(this, MainActivity.class);
            startActivity(intent);
        }
        else
        {
            Toast.makeText(this,"登录失败!",Toast.LENGTH_LONG).show();
        }
    }
}

下面首先是注册页面的布局代码,activity_register.xml

<?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:layout_margin="5dp"
    tools:context=".activity.RegisterActivity">

    <ImageView
        android:id="@+id/imageView4"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        app:srcCompat="@drawable/user_reg" />

    <TextView
        android:id="@+id/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/imageView4"
        android:layout_marginTop="10dp"
        android:text="昵称:"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="35dp" />

    <EditText
        android:id="@+id/editTextName"
        android:layout_width="334dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textViewName"
        android:layout_marginStart="35dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="35dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="Dear"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" />

    <TextView
        android:id="@+id/textViewPassword"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editTextName"
        android:layout_marginTop="10dp"
        android:text="密码:"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="35dp" />

    <EditText
        android:id="@+id/editTextPassword"
        android:layout_width="334dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textViewPassword"
        android:layout_marginStart="35dp"
        android:layout_marginEnd="35dp"
        android:layout_marginBottom="10dp"
        android:ems="10"
        android:inputType="numberPassword"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" />

    <TextView
        android:id="@+id/textViewPassword2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editTextPassword"
        android:layout_marginTop="10dp"
        android:text="确认密码:"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="35dp" />

    <EditText
        android:id="@+id/editTextPassword2"
        android:layout_width="332dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textViewPassword2"
        android:layout_marginStart="35dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="35dp"
        android:ems="10"
        android:inputType="numberPassword"
        android:layout_alignParentRight="true" />

    <TextView
        android:id="@+id/textViewPrompt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editTextPassword2"
        android:layout_marginTop="10dp"
        android:text="密码提示:"
        android:layout_marginLeft="35dp" />

    <EditText
        android:id="@+id/editTextPrompt"
        android:layout_width="324dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textViewPrompt"
        android:layout_marginStart="35dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="35dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true" />

    <Button
        android:id="@+id/buttonRegister"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="30dp"
        android:layout_centerInParent="true"
        android:background="@drawable/login_button_shape"
        android:text="注册" />
</RelativeLayout>

界面样式如下:

然后是注册的逻辑结构:

package com.example.thorineaccount.activity;

import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.example.thorineaccount.R;


public class RegisterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        Button buttonRegister = (Button)findViewById(R.id.buttonRegister);
        buttonRegister.setOnClickListener(new View.OnClickListener() {//注册按钮的点击事件
            @Override
            public void onClick(View v) {
                register();
            }
        });
    }

    private void register(){
        EditText editTextName = (EditText)findViewById(R.id.editTextName);
        EditText editTextPassword = (EditText)findViewById(R.id.editTextPassword);
        EditText editTextPassword2 = (EditText)findViewById(R.id.editTextPassword2);
        EditText editTextPrompt = (EditText) findViewById(R.id.editTextPrompt);

        String name = editTextName.getText().toString();
        if(name.length()<1) {
            Toast.makeText(this,"昵称不能为空",Toast.LENGTH_SHORT).show();
            return;
        }
        String pwd = editTextPassword.getText().toString();
        String pwd2 = editTextPassword2.getText().toString();
        if (pwd.length() < 1){
            Toast.makeText(this,"密码不能为空.",Toast.LENGTH_LONG).show();
            return;
        }
        if (!pwd.equals(pwd2)){
            Toast.makeText(this,"两次密码不相同.",Toast.LENGTH_LONG).show();
            return;
        }
        String prompt = editTextPrompt.getText().toString();
        //用SharedPreferences方式存储数据
        SharedPreferences sp = this.getSharedPreferences("tinyaccount", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sp.edit();
        editor.putString("name",name);
        editor.putString("password",pwd);
        editor.putString("prompt",prompt);

        editor.apply();
        finish();
    }

}

 至此便可完成一个简单的登录注册功能。

猜你喜欢

转载自www.cnblogs.com/dongao/p/12300214.html