前言
上一篇博文讲了一下如何将用户信息添加进入SQLite数据库,实现注册功能,这一次就来讲讲如何验证用户信息是否一致,完成登录功能。
绘制布局
线性布局:用户名输入框(EditText)+密码输入框(EditText)+登录按钮(ImageView)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/login_bg">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/back_bt"
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/back"/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:textSize="20dp"
android:textColor="#FF9D00"
android:gravity="center"
android:text="登录"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#FF9D00">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_marginTop="100dp"
>
<EditText
android:id="@+id/ed_us"
android:layout_width="300dp"
android:layout_height="50dp"
android:hint="请输入用户名/手机号/邮箱"
android:background="@drawable/login_ed"
android:textCursorDrawable="@drawable/guangbiao"
/>
<EditText
android:id="@+id/ed_pa"
android:layout_width="300dp"
android:layout_height="50dp"
android:hint="请输入密码"
android:inputType="textPassword"
android:background="@drawable/login_ed"
android:textCursorDrawable="@drawable/guangbiao"
android:layout_marginTop="20dp"/>
<ImageView
android:id="@+id/login_bt"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="20dp"
android:background="@drawable/log_bt"
/>
<LinearLayout
android:layout_width="300dp"
android:layout_height="50dp"
android:orientation="horizontal">
<TextView
android:id="@+id/res"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:textColor="#FF9D00"
android:text="注册账号"
/>
<TextView
android:id="@+id/wj"
android:gravity="right"
android:textColor="#FF9D00"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:text="忘记密码?"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
实现功能
你还记得在上一遍我不是在 DBOpenHelper 中写了 getAllData() 方法吗,那我们可以定义一个数组以键值对形式接收其返回的数值,使用for循环进行匹配,返回match是true,还是false。
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
DBOpenHelper mDBOpenHelper;
EditText userName,password;
ImageView back, login;
TextView wj,res;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
mDBOpenHelper = new DBOpenHelper(this);
userName = findViewById(R.id.ed_us);
password =findViewById(R.id.ed_pa);
back =findViewById(R.id.back_bt);
login = findViewById(R.id.login_bt);
wj =findViewById(R.id.wj);
res =findViewById(R.id.res);
back.setOnClickListener(this);
login.setOnClickListener(this);
wj.setOnClickListener(this);
res.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()){
/**返回主页按钮 */
case R.id.back_bt:{
Intent main =new Intent(LoginActivity.this,MainActivity.class);
startActivity(main);
finish();
}
break;
/**核心功能*/
case R.id.login_bt:{
/**获取用户和密码框输入的值 */
String name = userName.getText().toString().trim();
String passwored = password.getText().toString().trim();
/**判断是否为空,你还可以在注册页面使用正则表达式写更多的规则*/
if (!TextUtils.isEmpty(name) && !TextUtils.isEmpty(passwored)) {
/**数组接收值*/
ArrayList<User> data = mDBOpenHelper.getAllData();
boolean match = false;
/**for循环匹配,注册也应该写一个这样的,判断数据库里已经有了这样一个用户,不能使用相同的用户名进行注册 */
for(int i=0;i<data.size();i++) {
User user = data.get(i);
if (name.equals(user.getName()) && passwored.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, "用户名或密码不正确,请重新输入"+passwored, Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(this, "请输入你的用户名或密码", Toast.LENGTH_SHORT).show();
}
}
break;
case R.id.wj:{
Toast.makeText(this, "未开发", Toast.LENGTH_SHORT).show();
}
break;
case R.id.res:{
Intent res =new Intent(LoginActivity.this,UpActivity.class);
startActivity(res);
finish();
}
break;
}
}
}
效果图
借鉴所得:…找不到网址了,勿怪。
源码下载:https://download.csdn.net/download/qq_41858698/12056886
上一篇注册地址:https://blog.csdn.net/qq_41858698/article/details/103753447
GitHub项目下载得等考试周结束了。
有了注册登录,应该还有找回密码吧,但是得做个真的验证码验证。