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();
    }

}

 至此便可完成一個簡單的登錄注冊功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM