本学期学习了Android Studio这门课程,本次使用Android Studio自带的sqlite数据库实现一个简单的登录注册功能。

目录

一、了解什么是Android Studio?

二、了解什么是sqlite?

三、创建项目文件

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

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

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

七、实现登录功能

八、总结


一、了解什么是Android Studio?

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

二、了解什么是sqlite?

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

  1. 轻量级:SQLite是一个嵌入式数据库,它以一个独立的、自给自足的文件形式存在,不需要额外的服务器进程或配置。它的库文件大小较小,占用的系统资源较少,适合在资源有限的环境中使用。

  2. 易于使用:SQLite提供了简单的API和易于理解的SQL查询语言,使得开发人员可以轻松地进行数据库操作。它使用标准的SQL语法,并提供了广泛的查询、插入、更新和删除功能。

  3. 高性能:由于SQLite是一个本地文件数据库,它可以直接访问数据,而无需网络连接。这使得数据库操作的速度非常快,并且可以在本地执行复杂的查询和事务。

  4. 跨平台支持: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数据库数据存储技术,以及与网络通信、数据解析和持久化相关的技术。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐