Android studio—SQlite注销账号(删除账号)
继上篇
上两篇篇我们完成了利用SQLite完成用户的注册与登录功能以及修改密码,有兴趣的同学可以回顾一下:
Android studio—SQlite数据库注册登录:https://blog.youkuaiyun.com/genijmni/article/details/106626300
Android studio—SQlite修改密码:https://blog.youkuaiyun.com/genijmni/article/details/106697445
在完成注册登录后,我们这次开发的功能就是:注销账号(删除账号)
多说无益,直接上效果展示:
效果预览
删除后的账号无法再继续登录,并且所有数据删除。
用户类
用户类不多说,自动补全Get、Set方法
public class User {
private String name;
private int id;
private String password;
public User(String name,String password){
super();
this.name = name;
this.password = password;
}
public int getId() {return id;}
public void setId(int id) {
this.id = id;
}
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;
}
@Override
public String toString() {
return "User{id ="+ id + ", name = "+ name +",password ="+password +"}";
}
}
完善数据库功能
上两篇的数据库使用到了增加方法(add)和修改方法(updata),这篇我们完善删除方法(delete)
三个方法一同贴上:
public class SQlite extends SQLiteOpenHelper {
private SQLiteDatabase db;
public SQlite(Context context){
super(context,"db_test",null,2);
db = getReadableDatabase();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"name 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 = ?",new Object[]{name,password});
}
public void updata(String name,String password){
db.execSQL("UPDATE user SET password =? ",new Object[]{password});
}
public ArrayList<User> getAllDATA(){
ArrayList<User> list = new ArrayList<User>();
Cursor cursor = db.query("user",null,null,null,null,null,"name DESC");
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String password = cursor.getString(cursor.getColumnIndex("password"));
list.add(new User(name,password));
}
return list;
}
}
SQLite的功能基本完成,增加、删除、修改,还剩下一个查看。最后一个功能看情况完善。
注销账号功能
注销账号需要:
1.小弹窗警告提醒,删除后果
2.通过账号密码验证是否是本人行为
首先需要新建一个Acitity.
定义控件
private EditText username;
private EditText userpassword;
private SQlite mSQlite;
private Button ready;
private Button back;
对控件进行绑定:
ready =findViewById(R.id.reday);
back = findViewById(R.id.back);
username= findViewById(R.id.userName);
userpassword=findViewById(R.id.userpassword);
账号密码确定
账号密码确定采用相同的认证方法,对输入的内容对比数据库数据。
删除采用数据库的删除方法:
mSQlite.delete(name,password);
当输入数据与数据库原始数据对应,即可完成注销账号操作:
ready.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String name = username.getText().toString().trim();
String password = userpassword.getText().toString().trim();
if (TextUtils.isEmpty(name)||TextUtils.isEmpty(password)){
Toast.makeText(deleteActivity.this,"选项不能为空",Toast.LENGTH_SHORT).show();
return;
}
ArrayList<User> data = mSQlite.getAllDATA();
boolean userdata = false;
for (int i = 0; i < data.size(); i++) {
User user = data.get(i); //可存储账号数量
if (name.equals(user.getName()) && password.equals(user.getPassword())) {
userdata = true;
break;
} else {
userdata = false;
}
}
if (userdata){
mSQlite.delete(name,password);
Toast.makeText(deleteActivity.this,"注销成功",Toast.LENGTH_SHORT).show();
Intent intent1 = new Intent(deleteActivity.this,MainActivity.class);
startActivity(intent1);
finish();
}
}
});
mSQlite = new SQlite(deleteActivity.this);
用户注销的功能到此就大致完成了,如果你需要继续优化,就往下看。
删除一个东西前,系统对我们进行提醒。这里我就使用最常见的小弹窗警告方法。
小弹窗警告
先预览一下弹窗效果
首先我们需要一个空闲的XML布局文件,方便我们使用。
在这个XML文件中,我们不需要进行布局。
并且在注销账户的按钮上添加一个属性:
android:onClick="delete"
方便我们点击触发事件。
在需要弹出的页面,调用这个XML布局。
final View view1 = getLayoutInflater().inflate(R.layout.activity_delete,null);
主题功能代码写在主类之中,写在onCreate方法之外:
public void delete(View view){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("是否确定注销账号");
builder.setMessage("注销账号会使你所有资料清楚,确认是否注销账号");
final View view1 = getLayoutInflater().inflate(R.layout.activity_delete,null);
builder.setView(view1);
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
Intent intent1 = new Intent(Main2.this,deleteActivity.class);
startActivity(intent1);
finish();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
}
});
builder.show();
}
这里需要注意的是:“确定”和“取消”采用的是两个不同的Button属性控件
builder.setPositiveButton("确定", new DialogInterface.OnClickListener()
builder.setNegativeButton("取消", new DialogInterface.OnClickListener()
一个采用的是setPositiveButton,另一个是setNegativeButton,自动生成时需要观察清楚。
若都使用同一个属性,在弹窗时会只有一个按钮。
总结
通过对数据库的验证,以及对数据库功能的完善,能够完成对用户的账户注销。
并且通过小弹窗的方式进行提醒注销后果。
我们下篇讲讲完善登录注册功能,增加了一些新技巧功能