利用SQLite数据库进行用户名、密码的注册和登录验证

2023-11-12

利用SQLite数据库进行存储用户名、密码等等其他信息

首先是activity_main布局界面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#74d6e6"
    tools:context=".MainActivity" >
    <LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ImageView 
        android:id="@+id/banner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/banner"
        android:layout_gravity="center"
        android:layout_marginTop="90sp"/>
    <EditText
        android:id="@+id/username"
        android:layout_gravity="center"
        android:layout_marginTop="30sp"
        android:hint="用户名"
        android:layout_width="300sp"
        android:layout_height="wrap_content"/>
    <EditText
        android:id="@+id/pasw"
        android:layout_gravity="center"
        android:layout_marginTop="30sp"
        android:hint="密码"
        android:password="true"
        android:layout_width="300sp"
        android:layout_height="wrap_content"/>
    <Button
        android:id="@+id/tijiao"
        android:layout_width="300sp"
        android:text="提交"
        android:layout_marginTop="30sp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"/>
    </LinearLayout>
    <RelativeLayout 
        android:id="@+id/relaativelayout1"
        android:layout_width="fill_parent"
        android:layout_alignParentBottom="true"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10sp">
    <View
        android:id="@+id/view1"
        android:layout_width="300sp"
        android:layout_height="1sp"
        android:background="#d7f2f7"
        android:layout_centerHorizontal="true"
        />
    <View
        android:id="@+id/view2"
        android:layout_width="1sp"
        android:layout_height="40sp"
        android:background="#d7f2f7"
        android:layout_centerInParent="true"
        android:layout_below="@+id/view1"/>
    <TextView
        android:id="@+id/zhuce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注册"
        android:textSize="20sp"
        android:layout_toLeftOf="@+id/view2"
        android:layout_marginRight="30sp"
        android:layout_marginTop="10sp"
       />
    <TextView
        android:id="@+id/suibian"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="随便看看"
        android:textSize="20sp"
        android:layout_toRightOf="@+id/view2"
        android:layout_marginLeft="30sp"
        android:layout_marginTop="10sp"
       />

  </RelativeLayout>


</RelativeLayout>

底下的两个按钮,“注册”是跳转到注册用户名和密码界面;“随便看看”是跳过注册登录页面,直接进入到主程序,方便路人进行浏览操作。


接下来是注册页面的布局zhuce.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView 
        android:id="@+id/teview1"
        android:layout_width="fill_parent"
        android:layout_height="70sp"
        android:text="注册"
        android:background="#74d6e6"
        android:textSize="40sp"
        android:paddingTop="10sp"
        android:paddingLeft="20sp"/>
    <EditText 
        android:id="@+id/editview1"
        android:layout_marginTop="50sp"
        android:layout_width="300sp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="用户名"/>
     <EditText 
        android:id="@+id/editview2"
        android:layout_marginTop="30sp"
        android:layout_width="300sp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="密码"
        android:password="true"/>
      <EditText 
        android:id="@+id/editview3"
        android:layout_marginTop="30sp"
        android:layout_width="300sp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="确认密码"
        android:password="true"/>
       <EditText 
        android:id="@+id/editview4"
        android:layout_marginTop="50sp"
        android:layout_width="300sp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="电子邮箱"/>
       <Button 
           android:id="@+id/tijiao"
           android:layout_width="300sp"
           android:layout_height="wrap_content"
           android:layout_gravity="center"
           android:layout_marginTop="30sp"
           android:text="提交注册"/>

</LinearLayout>

其中电子邮箱的验证功能没有做,大家可以跳过这一步的填写注册

下面是MainActivity.class

package com.example.android_login;
import android.os.Bundle;
import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.AlertDialog; 

public class MainActivity extends Activity {
	private TextView textview;
	//数据库名称
		private static final String DATABASE_NAME="yufengtest.db";
		
		//数据库版本号
		private static final int DATABASE_VERSION=1;
		//表名		
		private static final String TABLE_NAME="username";
		private DatebaseHelper databaseHelper;
		private SQLiteDatabase db;
		private Button button1;
		private EditText nameText,passText;
    private Intent intent;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main);
		
		nameText=(EditText)findViewById(R.id.username);
		passText=(EditText)findViewById(R.id.pasw);
		
		button1=(Button)findViewById(R.id.tijiao);
		textview=(TextView)findViewById(R.id.zhuce);
		textview.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				intent=new Intent(MainActivity.this,zhuce.class);
				startActivity(intent);
			}
			
		});	
		 
		//启动注册页面
		 TextView textview=(TextView)findViewById(R.id.zhuce);
		 textview.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent a=new Intent(MainActivity.this,zhuce.class);
				startActivity(a);
			}
			 
		 });
		 
		 //启动随便看看页面
		 TextView textview1=(TextView)findViewById(R.id.suibian);
		 textview1.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Intent a=new Intent(MainActivity.this,Main.class);
				startActivity(a);
			}
			 
		 });
	        button1.setOnClickListener(new LoginListener());  		
	}
	
	
	 class LoginListener implements OnClickListener{
		 public void onClick(View v){
		 String nameString =nameText.getText().toString();
		 String passString=passText.getText().toString();
		 if(nameString.equals("")||passString.equals(""))
		   {
			 //弹出消息框
			 new AlertDialog.Builder(MainActivity.this).setTitle("错误")  
            .setMessage("帐号或密码不能空").setPositiveButton("确定", null)  
            .show();  
		   }else{
			   isUserinfo(nameString,passString);
		   }
		 }
	 }

	public Boolean isUserinfo(String name,String pass)
	{
		String nameString=name;
		String passString=pass;
		databaseHelper=new DatebaseHelper(MainActivity.this,DATABASE_NAME,null,DATABASE_VERSION);
		db =  databaseHelper.getReadableDatabase();
		try{		
			Cursor cursor=db.query(TABLE_NAME, new String[]{"name","password"},"name=?",new String[]{nameString},null,null,"password");
			while(cursor.moveToNext())
			{
				String password=cursor.getString(cursor.getColumnIndex("password"));
				
				
				if(passString.equals(password))
				{
					 new AlertDialog.Builder(MainActivity.this).setTitle("正确")  
	                 .setMessage("成功登录").setPositiveButton("确定", new DialogInterface.OnClickListener() {
						
						@Override
						public void onClick(DialogInterface dialog, int which) {
							// TODO Auto-generated method stub
							Intent a=new Intent(MainActivity.this,Main.class);
							startActivity(a);
						}
					}).show();  
	                 
					break;
				}
				else
				{
					Toast.makeText(this, "用户名密码不正确",Toast.LENGTH_LONG).show();
					break;
				}
			}
			
			
			
               
		}catch(SQLiteException e){  
            CreatTable();  
        }  
        return false;  
	}
	 
	

	private void CreatTable() {
		// TODO Auto-generated method stub
		String sql = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME
				+ " (name varchar(30) primary key,password varchar(30));";
		try{
			db.execSQL(sql);
		}catch(SQLException ex){}
	}


	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

当然了,若想用到SQLite数据库,就必须创建一个子类DatebaseHelper.java

package com.example.android_login;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class DatebaseHelper extends SQLiteOpenHelper {
	//数据库名称
	private static final String DATABASE_NAME="yufengtest.db";
	
	//数据库版本号
	private static final int DATABASE_VERSION=1;
	
	//数据库SQL语句 添加一个表

	public DatebaseHelper(Context context, String name, CursorFactory factory,
			int version) {
		super(context, DATABASE_NAME, factory, DATABASE_VERSION);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		// TODO Auto-generated method stub
      db.execSQL("create table username( name varchar(30) primary key,password varchar(30))");
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		// TODO Auto-generated method stub

	}

}

注册页的zhuce.java

package com.example.android_login;

import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class zhuce extends Activity {
	private EditText edittext1,edittext2,edittext3;
	private Button button;
	private DatebaseHelper databaseHelper;
	//数据库名称
	private static final String DATABASE_NAME="yufengtest.db";
	//数据库版本号
	private static final int DATABASE_VERSION=1;
	
	private static final String TABLE_NAME="username";
	private SQLiteDatabase db;
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.zhuce);
		edittext1=(EditText)findViewById(R.id.editview1);
		edittext2=(EditText)findViewById(R.id.editview2);
		edittext3=(EditText)findViewById(R.id.editview3);

		button=(Button)findViewById(R.id.tijiao);
        button.setOnClickListener(new OnClickListener(){
        	
        	
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String namestring = edittext1.getText().toString();
	    		String passstring = edittext2.getText().toString();
	    		String repassstring=edittext3.getText().toString();
	    		if(passstring.equals(repassstring))
	    		{
				databaseHelper=new DatebaseHelper(zhuce.this,DATABASE_NAME,null,DATABASE_VERSION);
				db =  databaseHelper.getReadableDatabase();
				db.execSQL("insert into username (name,password) values(?,?)",new String[]{namestring,passstring});
			    
				Toast.makeText(zhuce.this, "注册成功!", Toast.LENGTH_LONG).show();
				Intent b=new Intent(zhuce.this,MainActivity.class);
				startActivity(b);
			    }
	    		else
	    		{
	    			Toast.makeText(zhuce.this,"两次密码不一致", Toast.LENGTH_LONG).show();
	    		}
			}
        	
        });
   }
	
	
}




点击dialog对话框中的“确定”按钮,会跳转到程序的主界面去,相当于直接点击“随便看看”按钮,大家可以自己编写后面的程序

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用SQLite数据库进行用户名、密码的注册和登录验证 的相关文章

  • 如何在游标中使用嵌套表

    CREATE PROCEDURE p cur OUT a cur IS type rec is record a varchar2 2 b number c number type tab is table of rec tab1 tab
  • 如何以编程方式判断蓝牙设备是否已连接?

    我了解如何获取已配对设备的列表 但如何判断它们是否已连接 这一定是可能的 因为我看到它们列在我手机的蓝牙设备列表中 并且它说明了它们的连接状态 将蓝牙权限添加到您的AndroidManifest中
  • ndk-build error.opencv2/core/core.hpp:没有这样的文件或目录

    我在 Android 中使用 OpenCV Nonfree 模块时遇到问题 我读了这个教程https sites google com site wghsite technical notes sift surf opencv androi
  • 升级到 Proguard 4.8 后无法导出应用程序

    我刚刚将我的 Android SDK ADT 和 Proguard 升级到最新最好的版本 我的项目在调试模式下编译并运行良好 但是当我尝试导出它的签名版本 APK 时 我收到来自导出向导的错误Eclipse 控制台上没有任何错误日志消息 如
  • android:ScrollView(或视差)内的RecyclerView

    我有一个片段2 次卡片浏览内有多个控件 below我有第二个卡片视图回收者视图 这有效perfect 问题是 recyclerview 启动了屏幕的最底部 并且滚动recyclerview非常small 以前使用过列表视图 这使我可以适应您
  • 与通用地图相比,MapView 的分辨率较差

    我刚刚收到 HTC Desire 进行测试 我注意到 残留在小于整个屏幕的框架中的地图视图不如通用地图应用程序那么清晰 有什么办法解决这个问题吗 您应该使用 API 级别 4 或更高级别编译应用程序 然后在 AndroidManifest
  • 选择时的 sqlite3_bind_text,准备好的 SQL 语句与字符串 SQL 语句的结果不同

    当我尝试使用 sqlite3 bind text 函数进行选择时 我遇到了问题 目的是获取数据 10 分钟时间段内的最新值 如果我使用准备好的语句并绑定我的值 则结果与具有 SQL 语法的普通字符串不同 两个测试的 SQL 语法 应该 相同
  • 如何在 Android 中创建始终位于顶部的全屏覆盖 Activity

    我希望能够创建一个始终位于 Android 显示前面的 Activity 它不应该接收任何输入 只需将其传递到其下面的任何应用程序即可 像平视显示器之类的东西 我能够研究我需要将底层窗口类型设置为 TYPE SYSTEM ALERT 但看起
  • 构建应用程序时出现 BufferOverflowException

    每次我想运行我的 Android 应用程序时 我都会收到错误 2013 11 02 13 05 36 Dex Loader Unable to execute dex java nio BufferOverflowException Che
  • Windows 64 位的 SQLite3 下载文件夹中没有 sqlite3.exe

    我正在尝试在 Windows 10 64 位上安装 SQLite 3SQLite下载页面 https www sqlite org download html我尝试了sqlite dll win64 x64 3170000 zip来自页面上
  • Android - 使用 SAX 解析器解析大文件

    我正在尝试使用 SAX 解析器解析来自 webservice 的 xml 数据 当我尝试使用 URL 解析数据 大小 7 4MB 时 它工作正常 但是当我从 URL 复制 xml 数据并放置 xml 文件时 size 7 4MB 在raw文
  • MutableStateflow 值、更新、发出

    假设我有一个可变状态流 https kotlin github io kotlinx coroutines kotlinx coroutines core kotlinx coroutines flow mutable state flow
  • Fresco:滚动 RecyclerView 后图像消失

    我有一个 Horizo ntal RecyclerView 每个项目都有一个使用 Facebook Fresco 图像库加载到其中的图像 然而 虽然正确的图像最初是在屏幕上滚动一点时加载的 但当 RecyclerView 进一步滚动时 它就
  • foo.setVisibility(View.GONE) 和parent.removeView(foo) 之间的区别

    如果 foo 是一个视图 那么有什么区别foo setVisibility View GONE and fooParent removeView foo 我对两个语句之前和之后视图的内存消耗特别感兴趣 可见性设置为 GONE 的视图是否会消
  • 如何在Room的数据库迁移中正确添加索引?

    我在迁移 Room 数据库时遇到问题 在更新的数据库中 我必须将一个字段从整数更改为双精度值 我读到它并不像听起来那么容易 为了做到这一点 我必须使用这个更改后的属性创建新的临时表 复制前一个表中的所有值 删除旧的值 最后重命名临时表 我的
  • onStart() 到底做了什么? - 安卓[重复]

    这个问题在这里已经有答案了 一段时间以来 我一直想知道 onStart 函数在 android 生命周期中的确切作用 网上的大多数资源只是说 它在您的活动在屏幕上可见之前被调用 但到目前为止我所做的应用程序我从未使用过onStart 我在
  • Android - 检测视图上的双击和三次点击

    我一直在尝试构建一个可以检测双敲击和三敲击的敲击检测器 在我的努力失败后 我在网上搜索了很长时间以找到可以使用的东西 但没有运气 奇怪的是 像这样的图书馆如此稀缺 有什么帮助吗 你可以尝试这样的事情 尽管我通常建议不要使用三次点击作为一种模
  • 带有工具提示的搜索栏 android

    Hi All 我正在尝试使用工具提示自定义 android 搜索栏 如给定的图像 有没有办法在搜索栏中添加带有拇指的文本视图 或任何其他想法 Thanks 我们可以通过拇指的界限来做到这一点 并在seekbar的progressChange
  • 如何以编程方式检测android中可用的底部软导航栏?

    我试图通过 android 程序确定软导航栏 我没有找到直接的方法来确定 有没有办法找到导航栏的可用性 软导航栏图像在这里 以下方法对我有用并在许多设备上进行了测试 public boolean hasNavBar Resources re
  • 如何从另一个活动更新 Recyclerview 数据

    我有两个活动 MainActivity 和 Addlogactivity 我正在更新 Addlogactivity 中的数据 该数据应显示在 mainactivity recyclerview 中 数据未在数据库中更新 MianActivi

随机推荐

  • np.random.randn()、np.random.rand()、np.random.randint()的区别和用法

    1 np random randn 函数 通过本函数可以返回一个或一组服从标准正态分布的随机样本值 语法 np random randn d0 d1 d2 dn 1 当函数括号内没有参数时 则返回一个浮点数 2 当函数括号内有一个参数时 则
  • SpringBoot+AOP实现用户操作日志的记录

    前言 任何一个项目都会有一个用户操作日志 也叫行为日志 的模块 它主要用来记录某个用户做了某个操作 当出现操作失败时 通过日志就可以快速的查找是哪个用户在哪个模块出现了错误 以便于开发人员快速定位问题所在 实现这一功能一般有两种方法 第一种
  • sqlite

    SQLite库包含一个名字叫做sqlite3的命令行 它可以让用户手工输入并执行面向SQLite数据库的SQL命令 本文档提供一个样使用sqlite3的简要说明 开始 启动sqlite3程序 仅仅需要敲入带有SQLite数据库名字的 sql
  • java调用C++代码

    首先我的参考博客如下 https www cnblogs com CLAYJJ p 7725975 html https www cnblogs com xiaocainiao2hao p 5619862 html https www cn
  • 安卓图片浏览app,应付期末考试的(附下载链接)

    安卓图片浏览app 一个简单的安卓app 采用andstudio开发 有注册登录功能 可以搜索详细情况请看应用截图所示 下载链接 https download csdn net download weixin 43474701 850717
  • 好好开始,好好告别,好好生活

    天气好像一下子冷了起来 才感盛夏 忽而立秋 季节轮换 很多人把很多人忘了吧 昨天我看到这样一句话 衬着淅沥了两天的小雨 莫名觉得有些伤感 这些年 不停地遇见 也不停地再见 总要等很久以后才知道 相遇是恰逢其时 离别也是早有因果 原来有些人出
  • Android Make Update-api 方法

    目录 SOC Rk3288Android Version 8 1 SOC Rk3566Android Version 11 SOC Rk3288 Android Version 8 1 众所周知 当修改到framework变量时 需要mak
  • 可视化图表种类不清楚?这两个宝藏参考网址推荐给你~~

    我是小z 不少读者会问 有啥介绍可视化类型的学习和参考资料 我平时在绘制可视化作品时 也会对种类繁多的可视化图表选择和系统绘制无从下手 今天 就推荐平时自己参考的可视化表种类网站 帮你熟悉和完善图表类型 内容如下 Chart Guide d
  • Ubuntu常用的有3种进入终端(terminal)界面方法

    Ubuntu常用的有3种进入终端 terminal 界面方法 分别如下 按快捷键 Ctrl Alt T 即可打开终端窗口 或者按 Ctrl Alt F1 F6 均可进入终端 模拟终端 不显示桌面 直接搜索 终端 并进入 注意事项 如果采用方
  • Java 校验规则

    import java util regex Matcher import java util regex Pattern import static jodd util StringUtil isEmpty 数据校验 author lf
  • SPI菊花链原理和配置

    一 概述 在一个主机和多个从器件的典型 SPI 系统中 通常采用专门的片选信号来寻址从器件 随着从器件数量不断增加 片选线也随之增多 这种情况将给电路板布板带来很大的挑战 一个布板方法就是采用菊链结构 本文详细讲述了 SPI 系统的菊链配置
  • Python的优点和缺点

    Python的优点 1 简单 Python的语法非常优雅 甚至没有像其他语言的大括号 分号等特殊符号 代表了一种极简主义的设计思想 阅读Python程序像是在读英语 2 易学 Python入手非常快 学习曲线非常低 可以直接通过命令行交互环
  • python爬虫学习笔记-M3U8流视频数据爬虫

    M3U8流视频数据爬虫 HLS技术介绍 现在大部分视频客户端都采用HTTP Live Streaming 而不是直接播放MP4等视频文件 HLS Apple为了提高流播效率开发的技术 HLS技术的特点是将流媒体切分为若干 TS片段 比如几秒
  • Sqli-labs通关手册【1-30关】

    1 sql注入的原理 1 sql注入的原因 语言分类 解释型语言和编译型语言 解释型语言是一种在运行时由一个运行时组件解释语言代码并执行其中包含的指令的语言 而编译型语言是代码在生成时转换为机器指令 然后在运行时直接由使用该语言的计算机执行
  • Hadoop中的契约监控机制,被惊艳到了

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 前情概要 二 背景引入 三 问题凸现 四 Hadoop的优化方案 一 前情概要 这篇文章给大家聊聊Hadoop在部署了大规模的集群场景下 大量客户端并发写数
  • 应用存储和持久化数据卷:存储快照与拓扑调度(至天)

    本文将主要分享以下两方面的内容 存储快照概念 使用与工作原理 存储拓扑调度背景 概念 使用与工作原理 基本知识 存储快照产生背景 在使用存储时 为了提高数据操作的容错性 我们通常有需要对线上数据进行snapshot 以及能快速restore
  • 【资源】小程序项目源码、项目图片素材、全栈课程、项目效果图、小程序mpvue项目实例等资源大全

    1 微信小程序源码地址链接 https pan baidu com s 1P9ISKk9YjSHbFCIqfCM pQ 提取码 g8c3 2 130个微信小程序源码地址链接 https pan baidu com s 1Hiq 6IVvzD
  • CSDN竞赛第56期题解

    CSDN竞赛第56期题解 1 题目名称 因数 数字游戏 小Q的柠檬汁做完了 掏出了自己的数字卡牌 想要和别人做数字游戏 可是她又不想要输掉游戏 她制定好规则 每 次每个人只能把这个牌换成它的因子的某个牌 但是这个因子不能是1或者整数本身 现
  • win10更新后,wsappx占用高内存/资源管理器占用CPU高

    目录 问题记录 搜索与实践 最终解决办法 系统还原 新问题 设置搜索不能用 问题记录 2022 7 26晚 没注意点击了 关机并更新 有个intel驱动更新 不确定是否是驱动问题 第二天开机各种问题 wsappx占用大量内运存 电脑卡死 重
  • 利用SQLite数据库进行用户名、密码的注册和登录验证

    利用SQLite数据库进行存储用户名 密码等等其他信息 首先是activity main布局界面