这里我只用简单的demo作示范,具体需求具体实现。
一、创建登录界面
<?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"> <EditText android:id="@+id/account" android:layout_width="240dp" android:layout_height="60dp" android:gravity="center" android:layout_gravity="center" android:textSize="20sp" android:layout_marginTop="180dp" android:inputType="number" android:maxLength="10" android:hint="Account number" android:drawableLeft="@drawable/ic_baseline_account_circle_24"> </EditText> <EditText android:id="@+id/password" android:layout_width="240dp" android:layout_height="60dp" android:gravity="center" android:layout_gravity="center" android:textSize="20sp" android:inputType="textPassword" android:maxLength="10" android:hint="Password" android:drawableLeft="@drawable/ic_baseline_fingerprint_24"> </EditText> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:orientation="horizontal" android:gravity="center"> <Button android:id="@+id/land" android:layout_width="90dp" android:layout_height="50dp" android:text="land" android:onClick="land" > </Button> <Button android:id="@+id/login" android:layout_width="90dp" android:layout_height="50dp" android:text="login" android:layout_marginLeft="40dp" android:onClick="login" > </Button> </LinearLayout> </LinearLayout>
二、构建数据库
在用SQLite作为android的数据库时我们需要自己写一个工具类来实现数据库的一系列操作,在MainActivity.java同目录下创建MySqliteOpenHelper.java
package com.example.login;
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 SQLiteOpenHelper mInstance;
public static synchronized SQLiteOpenHelper getmInstance(Context context){
if (mInstance==null){
mInstance=new MySqliteOpenHelper(context,"derryDB.db",null,1);
}
return mInstance;
}
private MySqliteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据表users,表中包含_account和_password两个字段,为了方便我把他们的类型全部设为text
String sql="create table users(_account text,_password text)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
在这里除了创建数据表那里不同的项目会有变动之外,其他地方很少有变动,建议保存这段代码以便以后直接拿来用。在软件第一次运行时这个数据库连同表便会一同创建,数据库的位置在这里:
点击软件右边的Device File Explorer,路径Data->Date->com.example.项目名称->Database
比如我创建的项目名为login
有了这个工具类之后就可以把用户的账号和密码存到数据库里了。
三、实现登陆和注册功能
在第一节里我们写了两个按钮,登陆和注册,现在就可以写他们点击之后的动作了。
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import java.util.Objects;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void land(View view){//这里的land对应登陆按钮里的onclick,按钮按下便会调用此函数
EditText account=findViewById(R.id.account);//获取id为account的EditText输入值
EditText password=findViewById(R.id.password);//获取id为password的EditText输入值
String got_account=account.getText().toString();//将得到的值转为字符串
String got_password=password.getText().toString();
SQLiteOpenHelper helper=MySqliteOpenHelper.getmInstance(this);
SQLiteDatabase db=helper.getReadableDatabase();//登陆用到的是读操作,这里用写操作也不会有问题
if (db.isOpen()){//判断数据库是否成功打开
Cursor cursor=db.rawQuery("select * from users",null);//取users数据表中所有用户数据,cursor是迭代游标,用于遍历操作
while (cursor.moveToNext()){//遍历所有用户数据
@SuppressLint("Range") String _account=cursor.getString(cursor.getColumnIndex("_account"));//获取每一个用户的账号
@SuppressLint("Range") String _password=cursor.getString(cursor.getColumnIndex("_password"));//获取每一个用户的密码
if (Objects.equals(_account,got_account)&&Objects.equals(_password, got_password)){//判断此次遍历到的用户账号和密码是否和用户输入的账号和密码相同
Log.e("land success",_account);
Intent ma2 = new Intent(MainActivity.this, MainActivity2.class);//跳转至登陆成功的界面,MainActivity是当前界面的java文件名,MainActivity2是要跳转的界面对应的java文件
startActivity(ma2);
}
}
cursor.close();//关闭迭代游标
db.close();//关闭数据库
}
}
public void login(View view){//对应注册按钮
EditText account=findViewById(R.id.account);
EditText password=findViewById(R.id.password);
String got_account=account.getText().toString();
String got_password=password.getText().toString();
SQLiteOpenHelper helper=MySqliteOpenHelper.getmInstance(this);
SQLiteDatabase db=helper.getWritableDatabase();
if (db.isOpen()){
String sql="insert into users(_account,_password) values(?,?)";//因为注册账号和密码需要获取用户输入的信息,所以我们暂时用问号代替,下面再用Object替代
db.execSQL(sql,new Object[]{got_account,got_password});
Log.e("login success",got_account);
}
db.close();
}
}
四、登陆后的界面
右键软件左边的项目文件中的com.example.项目名 文件夹->New->Activity->Empty Activity
扫描二维码关注公众号,回复:
14771602 查看本文章
界面自由发挥,这里附上我的:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="land success!"
android:textSize="50sp"
android:layout_gravity="center">
</TextView>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="return to the land page"
android:textSize="25sp"
android:layout_marginTop="80dp"
android:onClick="return_land">
</Button>
</androidx.appcompat.widget.LinearLayoutCompat>
这里写了一个按钮,为了演示返回登录界面的动作,对应java文件:
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity2 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
}
public void return_land(View view){
finish();//返回登录界面
}
}