前言
寫這篇博客主要是爲了鞏固一下學的Sqlite知識以及梳理一下這個項目的邏輯
實現邏輯
項目的圖片結構圖如下
代碼
user class
public class User {
private String name; //用戶名
private String password; //密碼
public User(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
DBOpenHelper class
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import java.util.ArrayList;
public class DBOpenHelper extends SQLiteOpenHelper {
private SQLiteDatabase db;
public DBOpenHelper(Context context){//打開數據庫
super(context,"db_test",null,1);//1:上下文,2:數據庫名,3:允許我們查詢數據時返回一個Cursor,4:當前數據庫的版本號
db = getReadableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db){//建表(user)語句
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +//PRIMARY key 將id設爲主鍵 ,AUTOINCREMENT 設置id列自爲增長
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name TEXT," + //text 文本類型
"password TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){//重寫升級
db.execSQL("DROP TABLE IF EXISTS user");
onCreate(db);
}
public void add(String name,String password){//重寫添加
db.execSQL("INSERT INTO user (name,password) VALUES(?,?)",new Object[]{name,password});
}
public void delete(String name,String password){//重寫刪除
db.execSQL("DELETE FROM user WHERE name = AND password ="+name+password);
}
public void updata(String password){//重寫更新
db.execSQL("UPDATE user SET password = ?",new Object[]{password});
}
public ArrayList<User> getAllData(){//將表內信息返回成一個list
ArrayList<User> list = new ArrayList<User>();
Cursor cursor = db.query("user",null,null,null,null,null,"name DESC");//1表名,2列,3行,4行,5指定列進行過濾,6進一步過濾。7得到的信息進行排序(desc逆序)
while(cursor.moveToNext()){//一行一行遍歷
String name = cursor.getString(cursor.getColumnIndex("name"));//移動到name列,讀取出來
String password = cursor.getString(cursor.getColumnIndex("password"));
list.add(new User(name,password));//添加到user 的list中
}
return list;//把list返回
}
}
activity_login.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="#eeeeee"
tools:context=".LoginActivity">
<RelativeLayout
android:id="@+id/rl_loginactivity_top"
android:layout_width="match_parent"
android:layout_height="70dp"
>
<ImageView
android:id="@+id/iv_loginactivity_back"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentTop="true"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:clickable="true" />
<TextView
android:id="@+id/tv_loginactivity_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登錄"
android:textColor="#3A5FCD"
android:textSize="20dp"
android:layout_toRightOf="@+id/iv_loginactivity_back"
android:layout_centerVertical="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="30dp"
/>
<TextView
android:id="@+id/tv_loginactivity_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="註冊"
android:textColor="#3A5FCD"
android:textSize="20dp"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="30dp"
android:clickable="true"
android:onClick="onClick"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_loginactivity_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/rl_loginactivity_top"
android:layout_marginTop="10dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_loginactivity_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用戶名:"/>
<EditText
android:id="@+id/et_loginactivity_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="手機號/郵箱/用戶名"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_loginactivity_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 碼:"/>
<EditText
android:id="@+id/et_loginactivity_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="登錄密碼"
android:inputType="textPassword"/>
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/bt_loginactivity_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_loginactivity_two"
android:layout_marginTop="10dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:text="登錄"
android:textColor="#3A5FCD"
android:gravity="center"
android:onClick="onClick"
/>
</RelativeLayout>
LoginActivity
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
private DBOpenHelper mDBOpenHelper;
private EditText mEtLoginactivityUsername;
private EditText mEtLoginactivityPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
initView();
mDBOpenHelper = new DBOpenHelper(this);
}
private void initView() {
// 初始化控件
mEtLoginactivityUsername = findViewById(R.id.et_loginactivity_username);
mEtLoginactivityPassword = findViewById(R.id.et_loginactivity_password);
// 設置點擊事件監聽器
}
public void onClick(View view) {
switch (view.getId()) {
// 跳轉到註冊界面
case R.id.tv_loginactivity_register:
startActivity(new Intent(this, RegisterActivity.class));
finish();
break;
case R.id.bt_loginactivity_login:
String name = mEtLoginactivityUsername.getText().toString().trim();//.trim()刪除兩邊的空格
String password = mEtLoginactivityPassword.getText().toString().trim();
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(password)) {//TextUtils.isEmpty()輸入框是空值或者你就敲了幾下空格鍵該方法都會返回true
ArrayList<User> data = mDBOpenHelper.getAllData();//data爲獲取的user表內的user信息
boolean match = false;
for (int i = 0; i < data.size(); i++) {//遍歷比較
User user = data.get(i);//獲取data裏的第i個user信息
if (name.equals(user.getName()) && password.equals(user.getPassword())) {//將信息與輸入的信息進行對比
match = true;
break;
} else {
match = false;
}
}
if (match) {
Toast.makeText(this, "登錄成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();//銷燬此Activity
} else {
Toast.makeText(this, "用戶名或密碼不正確,請重新輸入", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "請輸入你的用戶名或密碼", Toast.LENGTH_SHORT).show();
}
break;
}
}
}
activity_register.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:background="#eeeeee"
tools:context=".RegisterActivity">
<RelativeLayout
android:id="@+id/rl_registeractivity_top"
android:layout_width="match_parent"
android:layout_height="70dp"
>
<ImageView
android:id="@+id/iv_registeractivity_back"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:clickable="true"
/>
<TextView
android:id="@+id/tv_registeractivity_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="註冊"
android:textColor="#3A5FCD"
android:textSize="20dp"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/ll_registeractivity_body"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/rl_registeractivity_top"
android:layout_marginTop="10dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
>
<!-- 第一個文本編輯框 輸入用戶名 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_registeractivity_username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="用戶名:"/>
<EditText
android:id="@+id/et_registeractivity_username"
android:layout_width="match_parent"
android:layout_height="50dp"
android:hint="請輸入用戶名"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
/>
</LinearLayout>
<!-- 第二個文本編輯框 輸入密碼 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_registeractivity_password1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="密 碼:"/>
<EditText
android:id="@+id/et_registeractivity_password"
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical"
android:layout_marginLeft="10dp"
android:inputType="textPassword"
android:hint="請輸入密碼" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:layout_marginTop="10dp"
android:orientation="horizontal" />
<!-- 註冊按鈕 -->
<Button
android:id="@+id/bt_registeractivity_register"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="5dp"
android:textColor="#3A5FCD"
android:text="註冊"
android:layout_marginTop="40dp"
android:onClick="onClick"
/>
</LinearLayout>
</RelativeLayout>
RegisterActivity
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener {
private DBOpenHelper mDBOpenHelper;
private Button mBtRegisteractivityRegister;
private ImageView mIvRegisteractivityBack;
private EditText mEtRegisteractivityUsername;
private EditText mEtRegisteractivityPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
initView();
mDBOpenHelper = new DBOpenHelper(this);
}
private void initView(){
mEtRegisteractivityUsername = findViewById(R.id.et_registeractivity_username);
mEtRegisteractivityPassword = findViewById(R.id.et_registeractivity_password);
}
public void onClick(View view) {
switch (view.getId()) {
case R.id.iv_registeractivity_back: //返回登錄頁面
Intent intent1 = new Intent(this, LoginActivity.class);
startActivity(intent1);
finish();
break;
case R.id.bt_registeractivity_register: //註冊按鈕
//獲取用戶輸入的用戶名、密碼、驗證碼
String username = mEtRegisteractivityUsername.getText().toString().trim();
String password = mEtRegisteractivityPassword.getText().toString().trim();
//註冊驗證
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)) {
mDBOpenHelper.add(username, password);//將用戶名和密碼加入到數據庫的表內中
Intent intent2 = new Intent(this, LoginActivity.class);
startActivity(intent2);
finish();
Toast.makeText(this, "驗證通過,註冊成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "未完善信息,註冊失敗", Toast.LENGTH_SHORT).show();
}
break;
}
}
}