首先本文使用的是android自带的一个数据库表,所以说要使用查询表的功能,引入以下文件
MySQLiteOpenHelper.java
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
private SQLiteDatabase sqLiteDatabase;
public static final String CREATE_USER="create table user(" +
"id integer primary key autoincrement," +
"name text," +
"username text," +
"password text," +
"sj text)";
public MySQLiteOpenHelper(@Nullable Context context) {
super(context,"user",null,1);
this.context=context;
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL(CREATE_USER);
sqLiteDatabase.execSQL(CREATE_CONTEXT);
Toast.makeText(context, "创建成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
这样就算是成功创建我们的表user了,然后可以进行下面的注册和登录操作(就是简单的增加和查询)。
注册
- 创建一个布局文件来显示注册表单,该布局应包含输入用户名、电子邮件和密码的EditText视图组件以及注册按钮。
- 在Java文件中,通过findViewById()方法将EditText组件与代码关联,并使用getText()方法来获取用户输入的文本。
- 处理输入验证:你需要验证用户名是否唯一,邮箱是否有效,密码是否符合要求(大写字母、小写字母、数字、特殊字符等)。如果有任何问题,请向用户发出相应警告。
- 将表单数据保存在本地数据库或服务器上。
后端代码
-
public class register extends AppCompatActivity implements View.OnClickListener { private MySQLiteOpenHelper mySQLiteOpenHelper; private SQLiteDatabase sqLiteDatabase; private EditText username, name, password, affirm, sj; private Button register; User user = new User(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); setTitle("注册"); username = findViewById(R.id.re_username); username.setOnClickListener(this); password = findViewById(R.id.re_password); password.setOnClickListener(this); name = findViewById(R.id.re_name); name.setOnClickListener(this); affirm = findViewById(R.id.re_affirm); affirm.setOnClickListener(this); sj = findViewById(R.id.re_sj); sj.setOnClickListener(this); register = findViewById(R.id.re_register); register.setOnClickListener(this); initData(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.re_register: insert(); break; } } private void initData() { mySQLiteOpenHelper = new MySQLiteOpenHelper(this); sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase(); } private void insert() { // submit(); Boolean submit_flag=submit(); if (!submit_flag){ return ; }else{ String User=user.getUsername(); Cursor cursor=sqLiteDatabase.query("user",null,"username=?",new String[]{User},null,null,null); if(cursor.moveToFirst()){ Toast.makeText(this, "用户名已存在", Toast.LENGTH_SHORT).show(); }else { ContentValues mContentValues = new ContentValues(); mContentValues.put("name", user.getName()); mContentValues.put("username", user.getUsername()); mContentValues.put("password", user.getPassword()); mContentValues.put("sj", user.getSj()); long result = sqLiteDatabase.insert("user", null, mContentValues); sqLiteDatabase.close(); if (result != -1) { Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show(); Intent mIntent = new Intent(register.this, MainActivity.class); startActivity(mIntent); // 注册成功后,提交按钮置灰不可连续调用 // register.setClickable(false); // register.setBackgroundColor(Color.GRAY); } else { Toast.makeText(this, "注册失败", Toast.LENGTH_SHORT).show(); return; } } } } private boolean submit() { String mUsername = username.getText().toString().trim(); if (TextUtils.isEmpty(mUsername)) { Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show(); return false; } String mPassword = password.getText().toString().trim(); if (TextUtils.isEmpty(mPassword)) { Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show(); return false; } String mAffirm = affirm.getText().toString().trim(); if (TextUtils.isEmpty(mAffirm)) { Toast.makeText(this, "请确认密码", Toast.LENGTH_SHORT).show(); return false; } String mName = name.getText().toString().trim(); if (TextUtils.isEmpty(mName)) { Toast.makeText(this, "请输入名称", Toast.LENGTH_SHORT).show(); return false; } String msj = sj.getText().toString().trim(); if (TextUtils.isEmpty(msj)) { Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show(); return false; } user.setUsername(mUsername); user.setName(mName); user.setPassword(mPassword); user.setSj(msj); return true; } }
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="60dp" android:textSize="36dp" android:gravity="center" android:text="注册" /> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="20dp" android:layout_marginTop="80dp" android:layout_marginRight="20dp" android:orientation="vertical"> <EditText android:id="@+id/re_username" android:layout_width="match_parent" android:layout_height="wrap_content" android:drawablePadding="5dp" android:hint="请输入账号" android:maxLines="1" /> <EditText android:id="@+id/re_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawablePadding="5dp" android:hint="请输入密码" android:inputType="textPassword" android:maxLines="1" /> <EditText android:id="@+id/re_affirm" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawablePadding="5dp" android:hint="请确认密码" android:inputType="textPassword" android:maxLines="1" /> <EditText android:id="@+id/re_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawablePadding="5dp" android:hint="请确认输入姓名" android:inputType="none" android:maxLines="1" /> <EditText android:id="@+id/re_sj" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:drawablePadding="5dp" android:hint="请确认输入手机号" android:inputType="number" android:maxLines="1" /> <Button android:id="@+id/re_register" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="40dp" android:text="注册" android:textSize="18sp" /> </LinearLayout> </LinearLayout>
- 创建另一个布局文件来显示登录表单,该布局应包含输入电子邮件和密码的EditText视图组件以及登录按钮。以下是效果图和代码:
前端:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="80dp"
android:textSize="36dp"
android:gravity="center"
android:text="登录"
/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="100dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp">
<EditText
android:id="@+id/lg_username"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:drawablePadding="5dp"
android:hint="账号"
android:maxLines="1"/>
<EditText
android:id="@+id/lg_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lg_username"
android:layout_marginTop="10dp"
android:drawablePadding="5dp"
android:hint="密码"
android:maxLines="1"
android:inputType="textPassword"/>
<LinearLayout
android:id="@+id/ly"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/lg_password">
<CheckBox
android:id="@+id/lg_rememberPsd"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5"
android:text="记住密码"
/>
<TextView
android:id="@+id/lg_forgetPsd"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="忘记密码"
/>
</LinearLayout>
<Button
android:id="@+id/lg_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/ly"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:text="登录"
android:textSize="18sp"
/>
</RelativeLayout>
<TextView
android:id="@+id/lg_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="9dp"
android:layout_gravity="right"
android:onClick="register"
android:layout_marginRight="20dp"
android:text="没有账号?立即注册"
/>
- 获取用户输入-获取用户输入的用户名和密码。
- 检查凭据-检查提供的凭据是否与数据库中保存的凭据匹配。
- 登录用户-如果凭据是有效的,则将用户登录到应用程序,否则提示他们输入正确的用户名和密码。
-
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTitle("登录");// 修改标题头 setContentView(R.layout.activity_main); username = findViewById(R.id.lg_username); username.setOnClickListener(this); password = findViewById(R.id.lg_password); password.setOnClickListener(this); login = findViewById(R.id.lg_login); login.setOnClickListener(this); register = findViewById(R.id.lg_register); register.setOnClickListener(this); initData(); } private void initData() { mySQLiteOpenHelper = new MySQLiteOpenHelper(this); sqLiteDatabase = mySQLiteOpenHelper.getWritableDatabase(); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.lg_login: Login(); break; case R.id.lg_register: Intent mIntent = new Intent(MainActivity.this, register.class); startActivity(mIntent); break; } } public void Login() { String mUsername = username.getText().toString().trim(); String mPassword = password.getText().toString().trim(); //定义查询字段 String[] up = {"username", "password","name","sj","id"}; //定义查询条件 String up_and = "username=?AND password=?"; //定义查询变量 String[] ArgUp = {mUsername, mPassword}; //cursor对象每行数据的集合 // Cursor cursor = sqLiteDatabase.query("user",new String[]{"username","password"}, "username=?AND password=?",new String[]{mUsername,mPassword},null,null,null,"1"); Cursor cursor = sqLiteDatabase.query("user",null, up_and, ArgUp, null, null, null, "1"); System.out.print(cursor); if(TextUtils.isEmpty(mPassword)&&TextUtils.isEmpty(mUsername)){ Toast.makeText(this, "请输入账号密码", Toast.LENGTH_SHORT).show(); return; } if(TextUtils.isEmpty(mPassword)){ Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show(); return; } if(TextUtils.isEmpty(mUsername)){ Toast.makeText(this, "请输入账号", Toast.LENGTH_SHORT).show(); return; } // cursor.moveToFirst()方法将光标移动到第一行。它允许执行查询是否返回空集的测试 if ( cursor.moveToFirst()) { Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show(); //数据传送 选择传送那些数据 int value1 = cursor.getColumnIndex("username"); int value2 = cursor.getColumnIndex("name"); int value3 = cursor.getColumnIndex("sj"); int value4 = cursor.getColumnIndex("password"); int value5=cursor.getColumnIndex("id"); String name = cursor.getString(value2); mPassword=cursor.getString(value4); String sj=cursor.getString(value3); String id=cursor.getString(value5); Intent mIntent = new Intent(MainActivity.this, WeixinActivity.class); mIntent.putExtra("姓名",name); mIntent.putExtra("账号", mUsername); mIntent.putExtra("密码", mPassword); mIntent.putExtra("手机", sj); mIntent.putExtra("id",id); startActivity(mIntent); //结束一个Activity的生命周期 finish(); } else { Toast.makeText(this, "密码不正确", Toast.LENGTH_SHORT).show(); return; } //关闭查询 cursor.close(); //关闭数据库连接 sqLiteDatabase.close(); }
整体的登录方法就是一个sql查询,将你登录的信息获取到,然后使用sql语句查询出当前用户是否存在。
若要实现这些功能,需要了解 Android 应用程序架构及其组成部分。 此外,还需要学习 SQLite 数据库以及如何在 Android 应用程序中进行持久化存储。 通常,可以使用 Android Studio 这样的集成开发环境来快速创建一个安卓应用程序并进行调试和测试。