为保护用户个人隐私和方便管理员进行用户信息管理与监测,几乎所有的App都具有注册与登录账号功能,因此本节将介绍如何注册账号并进行账号管理。
本设计具有如下功能和技术:
1显示与隐藏密码(TransformationMethod);
2记住用户名和密码(SharedPreferences);
3注册账号(SQLite数据库中创建和添加);
4登录系统(Intent);
5查询用户信息(SQLite数据库中查询)。
1、显示与隐藏密码
为保证用户隐私安全,设置隐藏密码选项,通过点击“小眼睛”即可实现。该部分需分别添加图片“小眼睛”睁眼和闭眼两张图,接下来在Enter.java中直接编写代码即可。
关键代码如下所示:
eye.setOnClickListener(new View.OnClickListener() {
//密码隐藏部分
// @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.eye:
if (hide == true) {
eye.setImageResource(R.drawable.hide); //不可见
TransformationMethod method = PasswordTransformationMethod.getInstance(); //隐藏
passtext1.setTransformationMethod(method);
hide = false;
} else {
eye.setImageResource(R.drawable.open); //可见
HideReturnsTransformationMethod method = HideReturnsTransformationMethod.getInstance(); //可见
passtext1.setTransformationMethod(method);
hide = true;
}
int run = passtext1.getText().toString().length();
passtext1.setSelection(run);
break;
}
}
2、记住用户名和记住密码
当用户成功注册账号后,若登录时账号与密码输入无误,点击“→”方可进入系统。此时如果选中“记住用户名”和“记住密码”,当退出系统再次登录时便可以不必输入用户名和密码,直接点击“→”即可登录成功。
关键代码如下所示
对此功能进行“初始化设置”
//记住用户名、密码
checkBox1 = (CheckBox) this.findViewById(R.id.check1);
checkBox2 = (CheckBox) this.findViewById(R.id.check2);
String user = preferences.getString("userText1", null);
if (user == null) {
checkBox1.setChecked(false); //用户名CheckBox,上次用户名输入错误时,本次不显示用户名
} else {
usertext1.setText(user);
checkBox1.setChecked(true); //用户名CheckBox,上次用户名输入正确时,本次显示用户名
}
String pass = preferences.getString("passText1", null);
if (pass == null) {
checkBox2.setChecked(false); //密码CheckBox,上次密码输入错误时,本次不显示密码
} else {
passtext1.setText(pass);
checkBox2.setChecked(true); //密码CheckBox,上次密码输入正确时,本次显示密码
}
接下来对Button和EditText事件进行监听调用
if (checkBox1.isChecked()) { //记住用户名 CheckBox1
editor.putString("userText1", url);//若选中,则补充EditText
editor.commit();
} else {
editor.remove("userText1");//否则,清空EditText
editor.commit();
}
if (checkBox2.isChecked()) { //记住密码CheckBox2
editor.putString("passText1", text);//若选中,则补充EditText
editor.commit();
} else {
editor.remove("passText1");//否则,清空EditText
editor.commit();
}break;
3、注册账号
点击登录界面的注册按钮,则可切换至注册界面,用户需输入用户名、密码和确认密码。如果有一栏为空或两次密码不同则提示“注册失败,请更正后重新注册”,若注册成功,则会提示“注册成功,3s后自动跳转至登录界面”。
在本部分涉及以下知识点:
①创建数据库
dbHelper = new MyDatabaseHelper(Make.this, "usersStore.db", null, 2);
dbHelper.getWritableDatabase();
②向数据库添加用户名和密码
values.put("user_name",name1);//用户名
values.put("user_code",code2);//密码
③判断用户信息是否无误
if (name1.equals("")||code1.equals("")||code2.equals("")||code1.equals(code2)==false){//三栏为空或两次密码不同则注册失败
Toast.makeText(Make.this,"注册失败,请更正后重新注册",Toast.LENGTH_SHORT).show();
make_name.setText("");
make_code.setText("");
sure_code.setText("");
}
else{
db.insert("users",null,values);
values.clear();
make_name.setText("");
make_code.setText("");
sure_code.setText("");
Toast.makeText(Make.this,"注册成功,3s后自动跳转至登录界面",Toast.LENGTH_SHORT).show();
④通过线程,延时3s并自动返回登录界面
Thread myThread=new Thread(){//创建子线程
@Override
public void run() {
try{
sleep(3000);//使程序休眠3秒
finish();//关闭当前活动,返回至登录界面
}catch (Exception e){
e.printStackTrace();
}
}
};
myThread.start();
4、登录系统
对登录界面中Button“→”事件进行监听,查询用户信息数据库,输入用户名和密码与数据库中一致等登录成功。
String url= usertext1.getText().toString().trim();
String text = passtext1.getText().toString().trim();
String key1="SELECT*FROM users where user_name like '%"+url+ "%'";
SQLiteDatabase db1=dbHelper.getReadableDatabase();
Cursor cursor1=db1.rawQuery(key1,null);
if (cursor1.moveToFirst()){
do {
String user_name=cursor1.getString(cursor1.getColumnIndex("user_name"));
String user_code=cursor1.getString(cursor1.getColumnIndex("user_code"));
str1=user_name;
str2=user_code;
}while (cursor1.moveToNext());
}
cursor1.close();
if (TextUtils.isEmpty(url)){
Toast.makeText(Enter.this, "用户名不能为空!", Toast.LENGTH_SHORT).show();
}
if (TextUtils.isEmpty(text)){
Toast.makeText(Enter.this, "密码不能为空!", Toast.LENGTH_SHORT).show();
}
if (url.equals(str1) && text.equals(str2)) {
Toast.makeText(Enter.this, "登陆成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Enter.this, User_ad.class);
startActivity(intent);
5、查询用户信息
登录系统后,点击查询按钮,即可查到所有注册成功的用户信息。
dbHelper5 = new MyDatabaseHelper(this, "usersStore.db", null, 2);
dbHelper5.getWritableDatabase();
final TextView ad_info=(TextView)this.findViewById(R.id.ad_info);
ad_info.setMovementMethod(ScrollingMovementMethod.getInstance());
query_user.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.query_user:
SQLiteDatabase db1 = dbHelper5.getReadableDatabase();
Cursor c=db1.query("users",null,null,null,null,null,null);
if (c.moveToFirst()) {
do {
String user_name = c.getString(c.getColumnIndex("user_name"));
String user_code = c.getString(c.getColumnIndex("user_code"));
str10 += "用户名:" + user_name + ";" + "\n" + "密 码:" + user_code + ";" + "\n";
} while (c.moveToNext());}
c.close();
ad_info.setText(str10);
break;
}
}
});
好啦,所有功能介绍到此结束。
最后,需要在Manifest中进行添加和更改Activity名称,此处对界面主题也进行更改
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="注册登录账号"
android:supportsRtl="true"
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
<activity android:name=".Enter">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity android:name=".Make">activity>
<activity android:name=".User_ad">activity>
application>
本次设计并不复杂。只需三个xml文件,分别对应三个界面(登录界面、注册界面、系统界面)的UI设计。四个.java文件,分别对应三个界面的事件监听和一个数据库设计。
还有一些小细节,比如图片背景,EditText背景之类的内容。
对于普通开发来讲,各位亲可以忽略user_ad.xml和User_ad.java的内容,熟练掌握在数据库中注册账号就可以啦。
当当当当,重头戏来了,需要源码的点击此处即可获得Android studio开发app实现注册账号 登录界面 数据库监测界面