当前位置:首页 > 技术 > 正文内容

Android应用登录系统实现指南

访客 技术 2026年8月12日 1

核心要点:活动页面间的导航转换,以及SQLite数据库辅助类的应用

首先创建一个继承自SQLiteOpenHelper的自定义数据库管理类:

package com.example.myapp;

import android.content.ContentValues;
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.myapp.model.UserInfo;

public class DatabaseHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "UserDB.db";
    private static final String CREATE_USER_TABLE = "create table user_accounts(username TEXT, userpass TEXT)";
    
    public DatabaseHelper(@Nullable Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_USER_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库版本升级处理
    }

    public long addUser(UserInfo user) {
        SQLiteDatabase db = getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put("username", user.getUsername());
        values.put("userpass", user.getUserpass());
        
        long result = db.insert("user_accounts", null, values);
        db.close();
        return result;
    }
    
    public boolean checkUser(String username, String password) {
        SQLiteDatabase db = getReadableDatabase();
        String[] columns = {"username", "userpass"};
        String selection = "username = ?";
        String[] selectionArgs = {username};
        
        Cursor cursor = db.query("user_accounts", columns, selection, selectionArgs, 
                               null, null, null);
        
        if (cursor != null && cursor.moveToFirst()) {
            String storedPassword = cursor.getString(1);
            cursor.close();
            db.close();
            return storedPassword.equals(password);
        }
        
        if (cursor != null) {
            cursor.close();
        }
        db.close();
        return false;
    }
}

主活动界面实现:获取界面元素并设置点击事件监听,通过switch-case结构处理不同按钮的操作逻辑

package com.example.myapp;

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 HomeActivity extends AppCompatActivity implements View.OnClickListener {
    private Button signInButton, signUpButton;
    private EditText usernameField, passwordField;
    private DatabaseHelper dbHelper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home_layout);
        dbHelper = new DatabaseHelper(this);
        initializeViews();
    }

    private void initializeViews() {
        signInButton = findViewById(R.id.sign_in_btn);
        signUpButton = findViewById(R.id.sign_up_btn);
        usernameField = findViewById(R.id.username_input);
        passwordField = findViewById(R.id.password_input);
        
        signInButton.setOnClickListener(this);
        signUpButton.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sign_in_btn:
                String inputUsername = usernameField.getText().toString();
                String inputPassword = passwordField.getText().toString();
                
                if (dbHelper.checkUser(inputUsername, inputPassword)) {
                    Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
                    Intent dashboardIntent = new Intent(this, DashboardActivity.class);
                    startActivity(dashboardIntent);
                } else {
                    Toast.makeText(this, "登录失败,请检查用户名和密码", Toast.LENGTH_SHORT).show();
                }
                break;
                
            case R.id.sign_up_btn:
                Intent registerIntent = new Intent(this, RegisterActivity.class);
                startActivity(registerIntent);
                break;
        }
    }
}
<?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=".HomeActivity">

    <View
        android:layout_width="match_parent"
        android:layout_height="120dp" />
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="horizontal">
        
        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="用户名"
            android:id="@+id/username_label"
            android:textSize="30dp"
            android:gravity="center_vertical"/>
            
        <EditText
            android:id="@+id/username_input"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:hint="请输入用户名"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:orientation="horizontal">
        
        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="密码"
            android:id="@+id/password_label"
            android:textSize="30dp"
            android:gravity="center_vertical"/>
            
        <EditText
            android:id="@+id/password_input"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3"
            android:hint="请输入密码"
            android:inputType="textPassword"/>
    </LinearLayout>
    
    <Button
        android:layout_width="160dp"
        android:layout_height="80dp"
        android:text="登录"
        android:textSize="30dp"
        android:background="@color/colorPrimary"
        android:layout_gravity="center"
        android:id="@+id/sign_in_btn"/>

    <Button
        android:layout_width="160dp"
        android:layout_height="80dp"
        android:text="注册"
        android:textSize="30dp"
        android:background="@color/colorPrimary"
        android:layout_gravity="center"
        android:id="@+id/sign_up_btn"/>
</LinearLayout>

用户注册页面实现:

package com.example.myapp;

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;

import com.example.myapp.model.UserInfo;

public class RegisterActivity extends AppCompatActivity {
    private Button submitRegistration;
    private EditText usernameInput, passwordInput;
    private DatabaseHelper dbHelper;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_layout);
        dbHelper = new DatabaseHelper(this);
        initializeComponents();
    }

    private void initializeComponents() {
        submitRegistration = findViewById(R.id.submit_registration);
        usernameInput = findViewById(R.id.reg_username);
        passwordInput = findViewById(R.id.reg_password);
    }

    public void processRegistration(View view) {
        String enteredUsername = usernameInput.getText().toString();
        String enteredPassword = passwordInput.getText().toString();
        
        if (enteredUsername.isEmpty() || enteredPassword.isEmpty()) {
            Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show();
            return;
        }
        
        UserInfo newUser = new UserInfo(enteredUsername, enteredPassword);
        long result = dbHelper.addUser(newUser);
        
        if (result != -1) {
            Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show();
            Intent backToLogin = new Intent(this, HomeActivity.class);
            startActivity(backToLogin);
            finish();
        } else {
            Toast.makeText(this, "注册失败,请重试", Toast.LENGTH_SHORT).show();
        }
    }
}
标签: Android开发
返回列表

上一篇:图论:寻找所有可能路径的算法

没有最新的文章了...

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。