写个android的登陆注册页面,使用sqlite数据库

时间: 2023-11-27 19:53:20 浏览: 97
好的,下面是一个简单的 Android 登录注册页面的示例代码,使用 SQLite 数据库: 首先是布局文件 `activity_main.xml`: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- 登录表单 --> <LinearLayout android:id="@+id/login_form" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:orientation="vertical" android:visibility="visible"> <EditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名" /> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" android:inputType="textPassword" /> <Button android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="登录" /> <TextView android:id="@+id/register_link" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center" android:text="没有账号?点击注册" android:textColor="#00f" /> </LinearLayout> <!-- 注册表单 --> <LinearLayout android:id="@+id/register_form" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:orientation="vertical" android:visibility="gone"> <EditText android:id="@+id/register_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="用户名" /> <EditText android:id="@+id/register_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="密码" android:inputType="textPassword" /> <Button android:id="@+id/register_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="注册" /> <TextView android:id="@+id/login_link" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center" android:text="已有账号?点击登录" android:textColor="#00f" /> </LinearLayout> </LinearLayout> ``` 其中包含两个表单,一个用于登录,一个用于注册。 接下来是 MainActivity 的代码: ```java import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText mUsernameView; private EditText mPasswordView; private EditText mRegisterUsernameView; private EditText mRegisterPasswordView; private LinearLayout mLoginForm; private LinearLayout mRegisterForm; private SQLiteDatabase mDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mUsernameView = findViewById(R.id.username); mPasswordView = findViewById(R.id.password); mRegisterUsernameView = findViewById(R.id.register_username); mRegisterPasswordView = findViewById(R.id.register_password); mLoginForm = findViewById(R.id.login_form); mRegisterForm = findViewById(R.id.register_form); Button loginButton = findViewById(R.id.login_button); loginButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { attemptLogin(); } }); Button registerButton = findViewById(R.id.register_button); registerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { attemptRegister(); } }); TextView registerLink = findViewById(R.id.register_link); registerLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showRegisterForm(); } }); TextView loginLink = findViewById(R.id.login_link); loginLink.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showLoginForm(); } }); mDatabase = new DatabaseHelper(this).getWritableDatabase(); } private void attemptLogin() { String username = mUsernameView.getText().toString(); String password = mPasswordView.getText().toString(); Cursor cursor = mDatabase.query( DatabaseHelper.TABLE_USERS, null, DatabaseHelper.COLUMN_USERNAME + " = ? AND " + DatabaseHelper.COLUMN_PASSWORD + " = ?", new String[] {username, password}, null, null, null); if (cursor.moveToFirst()) { // 登录成功 Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show(); } else { // 登录失败 Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show(); } cursor.close(); } private void attemptRegister() { String username = mRegisterUsernameView.getText().toString(); String password = mRegisterPasswordView.getText().toString(); if (username.isEmpty() || password.isEmpty()) { Toast.makeText(this, "用户名和密码不能为空", Toast.LENGTH_SHORT).show(); return; } Cursor cursor = mDatabase.query( DatabaseHelper.TABLE_USERS, null, DatabaseHelper.COLUMN_USERNAME + " = ?", new String[] {username}, null, null, null); if (cursor.moveToFirst()) { // 用户名已存在 Toast.makeText(this, "用户名已存在", Toast.LENGTH_SHORT).show(); } else { // 注册新用户 ContentValues values = new ContentValues(); values.put(DatabaseHelper.COLUMN_USERNAME, username); values.put(DatabaseHelper.COLUMN_PASSWORD, password); mDatabase.insert(DatabaseHelper.TABLE_USERS, null, values); // 注册成功,自动登录 mUsernameView.setText(username); mPasswordView.setText(password); attemptLogin(); } cursor.close(); } private void showLoginForm() { mLoginForm.setVisibility(View.VISIBLE); mRegisterForm.setVisibility(View.GONE); } private void showRegisterForm() { mLoginForm.setVisibility(View.GONE); mRegisterForm.setVisibility(View.VISIBLE); } @Override protected void onDestroy() { super.onDestroy(); mDatabase.close(); } } ``` 其中 `DatabaseHelper` 是一个辅助类,用于创建和升级数据库: ```java import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "myapp.db"; private static final int DATABASE_VERSION = 1; public static final String TABLE_USERS = "users"; public static final String COLUMN_USERNAME = "username"; public static final String COLUMN_PASSWORD = "password"; private static final String SQL_CREATE_USERS_TABLE = "CREATE TABLE " + TABLE_USERS + " (" + COLUMN_USERNAME + " TEXT PRIMARY KEY," + COLUMN_PASSWORD + " TEXT)"; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(SQL_CREATE_USERS_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 升级数据库的代码 } } ``` 以上就是一个简单的 Android 登录注册页面的示例代码,使用 SQLite 数据库。
阅读全文

相关推荐

最新推荐

recommend-type

Android设计登录界面、找回密码、注册功能

总结来说,Android登录界面、找回密码和注册功能的实现涉及到UI设计、数据库操作、网络请求以及安全性考虑等多个方面。良好的设计和实现不仅能提高用户体验,也能增强应用程序的安全性和可靠性。在实际开发中,还...
recommend-type

Android Studio如何获取SQLite数据并显示到ListView上

获取SQLite数据库中的数据 SQLite是一个轻量级的数据库,它能将数据保存到你的手机,但缺点是一旦软件卸载所有数据将一同被销毁。因此,在使用SQLite前,需要根据自己的项目需要选择性的使用。获取SQLite数据库中的...
recommend-type

android将图片转换存到数据库再从数据库读取转换成图片实现代码

这个过程涉及到对图片的处理、SQLite数据库操作以及Android系统的ContentProvider和ContentValues。以下是一个实现这一功能的具体步骤和相关知识点: 1. **创建数据库**: 首先,我们需要创建一个SQLite数据库来...
recommend-type

Android Activity中使用Intent实现页面跳转与参数传递的方法

在Android应用开发中,页面之间的跳转和数据传递是常见的...对于更深入的学习,可以参考相关Android开发的教程和文章,如`Activity`操作技巧、视图`View`使用、`SQLite`数据库操作、`JSON`处理、文件操作、SD卡操作等。
recommend-type

安卓实训项目报告,项目为个人理财通APP

同时,Java语言在Android开发中的普及性和SQLite数据库的轻量级特性,使得此项目在技术上完全可行。 1.2 需求分析 用户需求主要包括:实时记录收支情况、分类管理收支项、自定义时间范围的统计分析、数据备份与恢复...
recommend-type

Python中快速友好的MessagePack序列化库msgspec

资源摘要信息:"msgspec是一个针对Python语言的高效且用户友好的MessagePack序列化库。MessagePack是一种快速的二进制序列化格式,它旨在将结构化数据序列化成二进制格式,这样可以比JSON等文本格式更快且更小。msgspec库充分利用了Python的类型提示(type hints),它支持直接从Python类定义中生成序列化和反序列化的模式。对于开发者来说,这意味着使用msgspec时,可以减少手动编码序列化逻辑的工作量,同时保持代码的清晰和易于维护。 msgspec支持Python 3.8及以上版本,能够处理Python原生类型(如int、float、str和bool)以及更复杂的数据结构,如字典、列表、元组和用户定义的类。它还能处理可选字段和默认值,这在很多场景中都非常有用,尤其是当消息格式可能会随着时间发生变化时。 在msgspec中,开发者可以通过定义类来描述数据结构,并通过类继承自`msgspec.Struct`来实现。这样,类的属性就可以直接映射到消息的字段。在序列化时,对象会被转换为MessagePack格式的字节序列;在反序列化时,字节序列可以被转换回原始对象。除了基本的序列化和反序列化,msgspec还支持运行时消息验证,即可以在反序列化时检查消息是否符合预定义的模式。 msgspec的另一个重要特性是它能够处理空集合。例如,上面的例子中`User`类有一个名为`groups`的属性,它的默认值是一个空列表。这种能力意味着开发者不需要为集合中的每个字段编写额外的逻辑,以处理集合为空的情况。 msgspec的使用非常简单直观。例如,创建一个`User`对象并序列化它的代码片段显示了如何定义一个用户类,实例化该类,并将实例序列化为MessagePack格式。这种简洁性是msgspec库的一个主要优势,它减少了代码的复杂性,同时提供了高性能的序列化能力。 msgspec的设计哲学强调了性能和易用性的平衡。它利用了Python的类型提示来简化模式定义和验证的复杂性,同时提供了优化的内部实现来确保快速的序列化和反序列化过程。这种设计使得msgspec非常适合于那些需要高效、类型安全的消息处理的场景,比如网络通信、数据存储以及服务之间的轻量级消息传递。 总的来说,msgspec为Python开发者提供了一个强大的工具集,用于处理高性能的序列化和反序列化任务,特别是当涉及到复杂的对象和结构时。通过利用类型提示和用户定义的模式,msgspec能够简化代码并提高开发效率,同时通过运行时验证确保了数据的正确性。"
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

STM32 HAL库函数手册精读:最佳实践与案例分析

![STM32 HAL库函数手册精读:最佳实践与案例分析](https://khuenguyencreator.com/wp-content/uploads/2020/07/bai11.jpg) 参考资源链接:[STM32CubeMX与STM32HAL库开发者指南](https://wenku.csdn.net/doc/6401ab9dcce7214c316e8df8?spm=1055.2635.3001.10343) # 1. STM32与HAL库概述 ## 1.1 STM32与HAL库的初识 STM32是一系列广泛使用的ARM Cortex-M微控制器,以其高性能、低功耗、丰富的外设接
recommend-type

如何利用FineReport提供的预览模式来优化报表设计,并确保最终用户获得最佳的交互体验?

针对FineReport预览模式的应用,这本《2020 FCRA报表工程师考试题库与答案详解》详细解读了不同预览模式的使用方法和场景,对于优化报表设计尤为关键。首先,设计报表时,建议利用FineReport的分页预览模式来检查报表的布局和排版是否准确,因为分页预览可以模拟报表在打印时的页面效果。其次,通过填报预览模式,可以帮助开发者验证用户交互和数据收集的准确性,这对于填报类型报表尤为重要。数据分析预览模式则适合于数据可视化报表,可以在这个模式下调整数据展示效果和交互设计,确保数据的易读性和分析的准确性。表单预览模式则更多关注于表单的逻辑和用户体验,可以用于检查表单的流程是否合理,以及数据录入
recommend-type

大学生社团管理系统设计与实现

资源摘要信息:"基于ssm+vue的大学生社团管理系统.zip" 该系统是基于Java语言开发的,使用了ssm框架和vue前端框架,主要面向大学生社团进行管理和运营,具备了丰富的功能和良好的用户体验。 首先,ssm框架是Spring、SpringMVC和MyBatis三个框架的整合,其中Spring是一个全面的企业级框架,可以处理企业的业务逻辑,实现对象的依赖注入和事务管理。SpringMVC是基于Servlet API的MVC框架,可以分离视图和模型,简化Web开发。MyBatis是一个支持定制化SQL、存储过程以及高级映射的持久层框架。 SpringBoot是一种全新的构建和部署应用程序的方式,通过使用SpringBoot,可以简化Spring应用的初始搭建以及开发过程。它使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。 Vue.js是一个用于创建用户界面的渐进式JavaScript框架,它的核心库只关注视图层,易于上手,同时它的生态系统也十分丰富,提供了大量的工具和库。 系统主要功能包括社团信息管理、社团活动管理、社团成员管理、社团财务管理等。社团信息管理可以查看和编辑社团的基本信息,如社团名称、社团简介等;社团活动管理可以查看和编辑社团的活动信息,如活动时间、活动地点等;社团成员管理可以查看和编辑社团成员的信息,如成员姓名、成员角色等;社团财务管理可以查看和编辑社团的财务信息,如收入、支出等。 此外,该系统还可以通过微信小程序进行访问,微信小程序是一种不需要下载安装即可使用的应用,它实现了应用“触手可及”的梦想,用户扫一扫或者搜一下即可打开应用。同时,它也实现了应用“用完即走”的理念,用户不用关心是否安装太多应用的问题。应用将无处不在,随时可用,但又无需安装卸载。 总的来说,基于ssm+vue的大学生社团管理系统是一款功能丰富、操作简便、使用方便的社团管理工具,非常适合大学生社团的日常管理和运营。