安卓通过本地的SQLite实现登录注册功能

废话不多说,我们直接来实操

1.先把基本的布局页面创建起来,这个根据个人来设置自己的布局(不定)

1.1登录的布局代码.xml,这里编辑框和按钮的样式用的是自定义的

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/bb3"
    tools:context=".Functional.MainActivity">

    <TextView
        android:id="@+id/text_top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:text="Note.Login"
        android:textColor="#FFFFFF"
        android:textSize="30dp"
        android:textStyle="italic"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/UserName"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="60dp"
        android:background="@drawable/edit"
        android:hint="请输入用户名"
        android:padding="15dp"
        android:singleLine="true"
        android:textSize="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_top" />

    <EditText
        android:id="@+id/Pwd"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="@drawable/edit"
        android:hint="请输入用户密码"
        android:inputType="textPassword"
        android:maxLength="16"
        android:padding="15dp"
        android:singleLine="true"
        android:textSize="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/UserName" />

    <Button
        android:id="@+id/login"
        android:layout_width="120dp"
        android:layout_height="60dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/button"
        android:text="登录"
        android:textStyle="bold"
        app:layout_constraintEnd_toStartOf="@+id/register"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/Pwd" />

    <Button
        android:id="@+id/register"
        android:layout_width="120dp"
        android:layout_height="60dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/button"
        android:text="注册"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/login"
        app:layout_constraintTop_toBottomOf="@+id/Pwd" />

</androidx.constraintlayout.widget.ConstraintLayout>

9c784061d2f94978a00e46f6c222731b.png

 

1.2注册的布局代码.xml,这里的样式同登录一样

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:background="@drawable/bb3"
    tools:context=".Home.Login">

    <TextView
        android:id="@+id/text_top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="90dp"
        android:text="Note.Register"
        android:textColor="#141414"
        android:textSize="30dp"
        android:textStyle="italic"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/register_name"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:background="@drawable/edit"
        android:hint="请输入用户名"
        android:padding="15dp"
        android:singleLine="true"
        android:textSize="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/text_top" />

    <EditText
        android:id="@+id/register_pwd"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="@drawable/edit"
        android:hint="请输入用户密码"
        android:inputType="textPassword"
        android:maxLength="16"
        android:padding="15dp"
        android:singleLine="true"
        android:textSize="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_name" />

    <EditText
        android:id="@+id/register_pwd2"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="@drawable/edit"
        android:hint="请确认密码"
        android:inputType="textPassword"
        android:maxLength="16"
        android:padding="15dp"
        android:singleLine="true"
        android:textSize="24dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.504"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_pwd" />

    <Button
        android:id="@+id/register_but"
        android:layout_width="120dp"
        android:layout_height="60dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/button"
        android:text="立即注册"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/back"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/register_pwd2" />

    <Button
        android:id="@+id/back"
        android:layout_width="120dp"
        android:layout_height="60dp"
        android:layout_marginTop="30dp"
        android:background="@drawable/button"
        android:text="返回登录"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/register_but"
        app:layout_constraintTop_toBottomOf="@+id/register_pwd2" />


</androidx.constraintlayout.widget.ConstraintLayout>

9460851ae17044afb7570e56312edee1.png

 

 2.下面先创建两个新类,一个标准的JavaBean类User,一个数据库类MyDatabaseHelper继承SQLiteOpenHelper

2.1User类的代码

package com.example.practicaltraining.JavaBean;
//标准的JavaBean类,就不过多解释了
public class User
{
    private int id;
    private String account;
    private String password;


    public User( ) {

    }
    public User(int id, String account, String password) {
        this.id = id;
        this.account = account;
        this.password = password;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        this.account = account;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.2数据库类MyDatabaseHelper

package com.example.practicaltraining.Database;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
import com.example.practicaltraining.JavaBean.Note;

public class MyDatabaseHelper extends SQLiteOpenHelper
{
    private static final String DATABASENAME = "Practical.db" ;	// 数据库名称
    private static final int DATABASEVERSION = 1 ;
    private static final String TABLE_USERNAME = "User" ;	// 用户表名称
   
    public MyDatabaseHelper(@Nullable Context context)
    {
        super(context, DATABASENAME, null, DATABASEVERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        //用户表
        String sqlString="create table "+ TABLE_USERNAME+"( id integer primary key autoincrement,Account varchar(255),Password varchar(255))";
        db.execSQL(sqlString);
    }
    //注册
    public  void Register(String Account,String Password)
    {
        SQLiteDatabase db=super.getWritableDatabase();
        String sqlString="insert into "+TABLE_USERNAME+"(Account,Password) values (?,?)";
        //构造占位符的参数数组
        Object args[]=new Object[]{Account,Password};
        db.execSQL(sqlString,args);//此方法执行的sql语句主要有创建、插入、修改、删除等
        db.close();
    }
    //查询账号的方法
    public Cursor find()
    {
        SQLiteDatabase db=super.getWritableDatabase();
        String sqlString="select * from User;";
        //执行查询,返回数据给游标
        Cursor result =db.rawQuery(sqlString,null);
        return result;
    }
  @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}

3.只要在登录和注册的Java类进行调用就可以了

登录.Java

package com.example.practicaltraining.Home;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.graphics.Color;
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 com.example.practicaltraining.Functional.MainActivity;
import com.example.practicaltraining.Functional.Register;
import com.example.practicaltraining.Database.MyDatabaseHelper;
import com.example.practicaltraining.R;

import java.util.Timer;
import java.util.TimerTask;

public class Login extends AppCompatActivity {

    Button login_but,register_but;
    TextView touchScreen;
    EditText Account_2,pwd;
    MyDatabaseHelper myDatabaseHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        spark();
        //按钮组件
        login_but = findViewById(R.id.login);
        register_but = findViewById(R.id.register);
        //编辑框
        Account_2 = findViewById(R.id.UserName);
        pwd =findViewById(R.id.Pwd);
        //数据库
        myDatabaseHelper = new MyDatabaseHelper(this);
        myDatabaseHelper.getWritableDatabase();//只读
        //登录
        login_but.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                String acc = Account_2.getText().toString();
                String pwd1 =pwd.getText().toString();
                //获取数据库数据,判断用户名是否在库
                Cursor result = myDatabaseHelper.find();
                int a=0;
                int b=0;
                for (result.moveToFirst();!result.isAfterLast();result.moveToNext())
                {
                    String account_1=result.getString(result.getColumnIndex("Account"));
                    String pwd_1=result.getString(result.getColumnIndex("Password"));
                    if (Account_2.getText().toString().equals(account_1) && pwd.getText().toString().equals(pwd_1))
                        a=1;
                    if (Account_2.getText().toString().equals(account_1))
                        b=1;
                }
                if (b==1)
                {
                    if (!Account_2.getText().toString().equals("") && !pwd.getText().toString().equals(""))
                    {
                        if(a==1)
                        {
                            Intent intent = new Intent(Login.this, MainActivity.class);
                            startActivity(intent);
                            finish();
                            Toast.makeText(Login.this, "登入成功", Toast.LENGTH_SHORT).show();
                        }
                        else
                            Toast.makeText(getApplicationContext(),"密码错误!", Toast.LENGTH_SHORT).show();
                    }else
                        Toast.makeText(getApplicationContext(),"用户名或密码不能为空!", Toast.LENGTH_SHORT).show();
                }
                else
                    Toast.makeText(Login.this, "账号不存在,请注册!", Toast.LENGTH_SHORT).show();
                //关闭游标
                result.close();

            }
        });
        //注册
        register_but.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //显示注册界面
                Intent intent = new Intent(Login.this, Register.class);
                //启动显示修改界面
                startActivity(intent);
                finish();
            }
        });
    }
}

注册.Java

package com.example.practicaltraining.Functional;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.database.Cursor;
import android.graphics.Color;
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 com.example.practicaltraining.Home.Login;
import com.example.practicaltraining.JavaBean.User;
import com.example.practicaltraining.Database.MyDatabaseHelper;
import com.example.practicaltraining.R;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

public class Register extends AppCompatActivity {
    Button register_lj,back;
    TextView touchScreen;
    EditText Account,Pwd1,Pwd2;
    MyDatabaseHelper myDatabaseHelper;
    ArrayList<User> data = new ArrayList<User>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        spark();
        //数据库
        myDatabaseHelper = new MyDatabaseHelper(this);
        //按钮组件
        register_lj =findViewById(R.id.register_but);
        back =findViewById(R.id.back);
        //编辑框
        Account = findViewById(R.id.register_name);
        Pwd1 = findViewById(R.id.register_pwd);
        Pwd2 = findViewById(R.id.register_pwd2);
        //立即注册
        register_lj.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //获取输入的用户名和密码
                String name = Account.getText().toString().trim();
                String password = Pwd1.getText().toString().trim();
                //获取数据库数据,判断用户名是否已存在
                Cursor result = myDatabaseHelper.find();
                int a=0;
                if (!Account.getText().toString().equals(""))
                {
                    if (Account.getText().toString().length()<6)
                        Toast.makeText(Register.this, "账号创建不能少于6位", Toast.LENGTH_SHORT).show();
                    else if (Pwd1.getText().toString().length()<6)
                        Toast.makeText(Register.this, "密码设置不能少于6位", Toast.LENGTH_SHORT).show();
                    else
                    {
                        for (result.moveToFirst();!result.isAfterLast();result.moveToNext())
                        {
                            //判断数据库是否存在此对象
                            String account_1 = result.getString(result.getColumnIndex("Account"));
                            if(Account.getText().toString().equals(account_1))
                            {
                                a=1;
                            }
                        }
                        //关闭游标
                        result.close();
                        if(!Pwd1.getText().toString().equals("") && !Pwd2.getText().toString().equals(""))
                        {
                            if ((Pwd1.getText().toString().equals(Pwd2.getText().toString()) && a==0))
                            {
                                myDatabaseHelper.Register(name,password);
                                Intent intent = new Intent(Register.this, Login.class);
                                startActivity(intent);
                                finish();
                                Toast.makeText(Register.this, "注册成功", Toast.LENGTH_SHORT).show();
                            }
                            else if (a==1)
                                Toast.makeText(getApplicationContext(),"账号已存在,请重新输入账号",Toast.LENGTH_SHORT).show();
                            else
                                Toast.makeText(getApplicationContext(),"两次密码输入不一致",Toast.LENGTH_SHORT).show();
                        } else
                            Toast.makeText(getApplicationContext(),"密码不能为空!",Toast.LENGTH_SHORT).show();
                    }

                } else
                    Toast.makeText(getApplicationContext(),"账号不能为空!",Toast.LENGTH_SHORT).show();
            }
        });
        //返回
        back.setOnClickListener(
                new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //显示注册界面
                Intent intent = new Intent(Register.this, Login.class);
                //启动显示修改界面
                startActivity(intent);
                finish();
            }
        });

    } 
}

现在运行能直接运行成功的,第一次要注册完才能登录。

祝你好运!!!写文章不易麻烦一键三联哇!!!

 

  • 17
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值