Android使用SqLite实现登录注册功能流程详解

 更新时间:2023年12月30日 09:57:01   作者:YioGyan  
这篇文章主要介绍了使用Android Studio自带的sqlite数据库实现一个简单的登录注册功能,SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎,本文给大家介绍的非常详细,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

一、了解什么是Android Studio

Android Studio 是开发 Android 应用程序的官方 IDE,基于 Intellij IDEA。你可以从官网Android Studio下载最新版本的 Android Studio。在项目开始之前,请确认已经安装好Android Studio和完成相关的环境配置。

二、了解什么是sqlite

SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。他有诸多的优点。

  • 轻量级:SQLite是一个嵌入式数据库,它以一个独立的、自给自足的文件形式存在,不需要额外的服务器进程或配置。它的库文件大小较小,占用的系统资源较少,适合在资源有限的环境中使用。
  • 易于使用:SQLite提供了简单的API和易于理解的SQL查询语言,使得开发人员可以轻松地进行数据库操作。它使用标准的SQL语法,并提供了广泛的查询、插入、更新和删除功能。
  • 高性能:由于SQLite是一个本地文件数据库,它可以直接访问数据,而无需网络连接。这使得数据库操作的速度非常快,并且可以在本地执行复杂的查询和事务。
  • 跨平台支持:SQLite数据库可以在多个操作系统和平台上运行,包括Windows、Linux、Mac和移动设备平台(如Android和iOS)。这使得开发人员可以使用相同的数据库技术来开发跨平台的应用程序。

想要学习sqlite数据库的可以点击了解sqlite教程,本文不做过多介绍。

三、创建项目文件

打开Android Studio,创建一个新的空白项目。

接下来设置应用程序的基本信息,如应用程序名和包名,指定程序的安卓版本等。

设置完成后点击完成,完成一个空项目的创建。

四、创建活动文件和布局文件

在项目工程结构下的Java目录下的包含你项目名的软件包下新建活动文件。一般项目会自带有一个默认活动。(叫这个名字?MainActivity)

右击软件包,创建一个名为RegisterActivity的活动,勾选第一个选项,创建完成活动后Android Studio会自动帮你创建对应的一个布局文件。

因为刚创建出来的布局文件是空白的,需要我们自己添加按钮或者文本,以下是一个布局页面的示例,可以根据自己需求更改。布局元素自行了解,不再过多叙述。

activity_register.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:orientation="vertical"
    tools:context=".RegisterActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"
        android:textSize="40dp"
        android:layout_gravity="center"
        />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:"
            android:textSize="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="3dp"
            />
        <EditText
            android:id="@+id/rusername"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入你的用户名"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"
            android:textSize="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="3dp"
            />
        <EditText
            android:id="@+id/rpassword"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请入你的密码"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="电话:"
            android:textSize="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="3dp"
            />
        <EditText
            android:id="@+id/rphone"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入你的电话"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="邮箱:"
            android:textSize="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="3dp"
            />
        <EditText
            android:id="@+id/remil"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入你的邮箱"/>
    </LinearLayout>
    <Button
        android:onClick="register"
        android:id="@+id/mregister"
        android:layout_gravity="center"
        android:layout_marginTop="40dp"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="注册"
        />
    <Button android:id="@+id/fh" android:onClick="gobak"
        android:layout_gravity="center"
        android:layout_marginTop="40dp"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:text="返回登录"
        />
</LinearLayout>

注册页面有了当然少不了登录页面,用上述的方法创建一个登录页面,同样给出一个示例页面。

login_activity.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:orientation="vertical"
    tools:context=".LoginActivity">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="登录"
        android:textSize="50dp"/>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="用户名:"
            android:textSize="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="3dp"
            />
        <EditText
            android:id="@+id/lusername"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入你的用户名"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="50dp"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密码:"
            android:textSize="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginTop="3dp"
            />
        <EditText
            android:id="@+id/lpassword"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:hint="请输入你的密码"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="300dp"
        >
        <Button
            android:id="@+id/login"
            android:layout_width="150dp"
            android:layout_height="55dp"
            android:layout_marginLeft="30dp"
            android:textSize="20dp"
            android:text="登录"></Button>
        <Button
            android:id="@+id/register"
            android:onClick="GoRegister"
            android:layout_width="150dp"
            android:layout_height="55dp"
            android:textSize="20dp"
            android:layout_marginLeft="60dp"
            android:text="注册"
            >
        </Button>
    </LinearLayout>
</LinearLayout>

五、创建数据库连接数据库

在活动目录包下创建一个名为MySQLiteOpenHelper的java类,注意是创建Java类不是活动类。并且继承SQLiteOpenHelper,后续我们在这个类中实现数据库的相关操作。

MySQLiteOpenHelper.java

package com.example.androidword;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    //数据库名字
    private static final String DB_NAME = "User.db";
    //创建用户表
    private static final String CREATE_USER = "create table user(id integer primary key autoincrement," +
            "username varchar(30)," +
            "password varchar(30)," +
            "phone varchar(30)," +
            "emil varchar(30))";
    //运行程序时,Android Studio帮你创建数据库,只会执行一次
    public MySQLiteOpenHelper(@Nullable Context context) {
        super(context,DB_NAME,null,1);
    }
    //创建数据表
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_USER);
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    }
}

六、创建实体类实现注册功能

在活动目录包下新建User类,用它当作我们此次项目的实体类,也就是数据库表中的字段。

User.java

package com.example.androidword;
//创建user类,并添加属性和构造方法、get、set方法
public class User {
    public String username;
    public String password;
    public String phone;
    public String emil;
    public User(){}
    public User(String username, String password, String phone, String emil) {
        this.username = username;
        this.password = password;
        this.phone = phone;
        this.emil = emil;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getEmil() {
        return emil;
    }
    public void setEmil(String emil) {
        this.emil = emil;
    }
}

接着我们去MySQLiteOpenHelper类中添加注册的方法,即把我们输入的数据保存在数据库中(插入)。

    public long register(User u){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues cv = new ContentValues();
        cv.put("username ",u.getUsername());
        cv.put("password",u.getPassword());
        cv.put("phone",u.getPhone());
        cv.put("emil",u.getEmil());
        long users = db.insert("user",null,cv);
        return users;
    }

在RegisterActivity活动类中我们还要编写相关的后台代码,如获取输入框,注册按钮等。

package com.example.androidword;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        //初始化获取的布局元素
        find();
    }
    //获取注册按钮,预先定义,下方输入框同理
    private Button register;
    private EditText username,password,phone,emil;
    //使用MySQLiteOpenHelper类中的方法
    private MySQLiteOpenHelper mySQLiteOpenHelper;
    //控制注册按钮点击完后不给点击了
    boolean flag = false;
    //跳转回登录页面
    public void gobak(View view){
        Intent gl = new Intent(RegisterActivity.this,LoginActivity.class);
        startActivity(gl);
    }
    //初始化获取的布局元素
    public void find(){
        username = findViewById(R.id.rusername);
        password = findViewById(R.id.rpassword);
        phone = findViewById(R.id.rphone);
        emil = findViewById(R.id.remil);
        register = findViewById(R.id.mregister);
        register.setOnClickListener(this);
    }
    //注册逻辑实现
    public void register(){
        String ru = username.getText().toString();
        String rps = password.getText().toString();
        String rph = phone.getText().toString();
        String rem = emil.getText().toString();
        User user = new User(ru,rps,rph,rem);
        if(ru.equals("")){
            Toast.makeText(this, "账号不能为空!", Toast.LENGTH_SHORT).show();
        } else if (rps.equals("")) {
            Toast.makeText(this, "密码不能为空!", Toast.LENGTH_SHORT).show();
        } else if (rph.equals("")) {
            Toast.makeText(this, "电话不能为空!", Toast.LENGTH_SHORT).show();
        }else if(rem.equals("")){
            Toast.makeText(this, "邮箱不能为空!", Toast.LENGTH_SHORT).show();
        }else{
            long r1 = mySQLiteOpenHelper.register(user);
            register.setEnabled(false);
            register.setTextColor(0xFFD0EFC6);
            if(r1!=-1){
                Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(this, "注册失败!", Toast.LENGTH_SHORT).show();
            }
        }
    }
    //监听按钮点击事件
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.mregister:
                register();
                break;
        }
    }
    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {
        super.onPointerCaptureChanged(hasCapture);
    }
}

运行程序,观察数据库是否成功创建,注册信息能否添加进数据库。

到此注册功能已经基本实现,更多的逻辑判断可以自行添加。接下来实现登录功能。

七、实现登录功能

MySQLiteOpenHelper类中添加登录的方法和根据用户名找到当前用户的方法。

 //登录方法实现
    public boolean login(String username,String password){
        SQLiteDatabase db = getWritableDatabase();
        boolean result = false;
        Cursor users = db.query("user", null, "username like?", new String[]{username}, null, null, null);
        if(users!=null){
            while (users.moveToNext()){
                @SuppressLint("Range") String username1 = users.getString(users.getColumnIndex("username"));
                Log.i("users", "login: "+username1);
                String password1 = users.getString(2);
                Log.i("users", "login: "+password1);
                result = password1.equals(password);
                return result;
            }
        }
        return false;
    }
    //根据用户名查找当前登录用户信息
    public User select(String username){
        SQLiteDatabase db = getWritableDatabase();
        User SelectUser = new User();
        Cursor user = db.query("user", new String[]{"username", "phone", "emil"}, "username=?", new String[]{username}, null, null, null);
        while(user.moveToNext()){
            @SuppressLint("Range") String uname =user.getString(user.getColumnIndex("username"));
            @SuppressLint("Range") String phone = user.getString(user.getColumnIndex("phone"));
            @SuppressLint("Range") String emil = user.getString(user.getColumnIndex("emil"));
            SelectUser.setUsername(uname);
            SelectUser.setPhone(phone);
            SelectUser.setEmil(emil);
        }
        user.close();
        return SelectUser;
    }

接下来同上一步,到LoginActivity活动类中找到登录按钮,输入框等布局元素,并实现登录功能。

package com.example.androidword;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
    private Button register,login;
    private EditText username,password;
    private MySQLiteOpenHelper mySQLiteOpenHelper;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        mySQLiteOpenHelper = new MySQLiteOpenHelper(this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        find();
    }
    public void find(){
        login = findViewById(R.id.login);
        register = findViewById(R.id.register);
        username = findViewById(R.id.lusername);
        password = findViewById(R.id.lpassword);
        login.setOnClickListener(this);
        register.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        int id = view.getId();
        switch (id){
            case R.id.login:
                String n = username.getText().toString();
                String p = password.getText().toString();
                if(n.equals("")){
                    Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show();
                }else if(p.equals("")){
                    Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
                }else{
                    boolean login = mySQLiteOpenHelper.login(n, p);
                    if(login){
                        Toast.makeText(this, "登录成功!", Toast.LENGTH_SHORT).show();
                        User select = mySQLiteOpenHelper.select(n);
                        Intent home = new Intent(LoginActivity.this,MainActivity.class);
                        Bundle bundle = new Bundle();
                        bundle.putString("username",select.username);
                        bundle.putString("emil",select.emil);
                        bundle.putString("phone",select.phone);
                        home.putExtras(bundle);
                        username.setText("");
                        password.setText("");
                        startActivity(home);
                    }else {
                        Toast.makeText(this, "账号或密码错误,请重新输入", Toast.LENGTH_SHORT).show();
                        password.setText("");
                    }
                }
                break;
            case R.id.register:
                Intent re = new Intent(LoginActivity.this, RegisterActivity.class);
                startActivity(re);
                break;
        }
    }
    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {
        super.onPointerCaptureChanged(hasCapture);
    }
}

重新启动应用,观察登录功能是否已经实现,上述例子中我添加了一个校验通过跳转另一个页面的方法来检验是否登录成功。

到此,我们已经实现了一个简单的注册和登录功能。

八、总结

学习Android Studio是学习Android应用开发的重要一步。下面是一个Android Studio课程学习的总结:

1. 熟悉界面和基本功能:开始学习之前,熟悉Android Studio的用户界面和各个功能区域。了解项目结构、编辑器、调试工具等基本功能,掌握常用的快捷键和操作技巧。

2. 学习Java或Kotlin语言:Android Studio主要使用Java或Kotlin语言进行开发。学习Java或Kotlin的基本语法、面向对象编程概念和常用的API。

3. 掌握Android框架和组件:了解Android的基本组件和框架,如Activity、Fragment、Intent、布局、资源管理等。学习如何创建和管理这些组件,以及它们之间的交互。

4. 学习布局设计和UI开发:掌握Android布局设计,使用XML和代码创建用户界面。了解常用的布局类型(如线性布局、相对布局、帧布局等),并学习如何使用UI控件(如TextView、Button、ImageView等)和样式化组件。

5. 数据存储和处理:学习如何在Android应用中存储和处理数据。了解SQLite数据库数据存储技术,以及与网络通信、数据解析和持久化相关的技术。

以上就是Android使用SqLite实现登录注册功能流程详解的详细内容,更多关于Android SqLite登录注册的资料请关注程序员之家其它相关文章!

相关文章

  • 30条android项目开发技巧与经验总结

    30条android项目开发技巧与经验总结

    本文为大家总结了30条android项目开发技巧与经验,,需要的朋友可以参考下
    2018-04-04
  • 在当前Activity之上创建悬浮view之WindowManager悬浮窗效果

    在当前Activity之上创建悬浮view之WindowManager悬浮窗效果

    这篇文章主要介绍了在当前Activity之上创建悬浮view之WindowManager悬浮窗效果的相关资料,需要的朋友可以参考下
    2016-01-01
  • Activity 四种启动模式详细介绍

    Activity 四种启动模式详细介绍

    这篇文章主要介绍了Activity 四种启动模式详细介绍的相关资料,需要的朋友可以参考下
    2017-02-02
  • Android事件处理的两种方式详解

    Android事件处理的两种方式详解

    事件是一种有用来收集用户与应用程序互动数据的互动组件,如按键或触摸屏等放置事件,因为每个事件从Android框架维护事件队列先入先出(FIFO)基础上的队列。可以在程序中捕获这些事件,按要求并采取适当的动作
    2023-02-02
  • Android开发笔记之:消息循环与Looper的详解

    Android开发笔记之:消息循环与Looper的详解

    本篇文章是对Android中消息循环与Looper的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Android自定义ProgressDialog进度等待框

    Android自定义ProgressDialog进度等待框

    这篇文章主要介绍了Android自定义ProgressDialog进度等待框,通过本文大家可以尝试利用Android自定义ProgressDialog,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • Android获取当前运行的类名或者方法

    Android获取当前运行的类名或者方法

    这篇文章主要介绍了Android获取当前运行的类名或者方法,涉及Android操作类与方法的技巧,需要的朋友可以参考下
    2015-05-05
  • android 解决ViewPager加载大量图片内存溢出问题

    android 解决ViewPager加载大量图片内存溢出问题

    本篇文章是介绍 android 解决ViewPager加载大量图片内存溢出问题,并附有代码实例,希望能帮到有需要的小伙伴
    2016-07-07
  • Android自动测试工具Monkey

    Android自动测试工具Monkey

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法
    2016-01-01
  • Convert WebP to PNG using java

    Convert WebP to PNG using java

    本文主要介绍Convert WebP to PNG using java,这里对 WebP 做了详细说明,并讲解Linux 环境下WebP 转png格式的示例,有兴趣的小伙伴可以参考下
    2016-08-08

最新评论

?


http://www.vxiaotou.com