我想创建一个注销按钮,它将删除整个数据库并完成当前活动并重定向到LoginActivity。
这确实有效,但我需要重新启动我的应用程序来提交更改。例如,当应用程序返回LoginActivity时,它仍会看到用户数据。如果我重新启动应用程序,它将显示我应该的登录表单。我怎么能做到这一点?
globals.Java
public void signOff(){
SharedPreferences preferences = instance.context.getSharedPreferences("globals", 0);
preferences.edit().remove("domain").commit();
DatabaseHelper dbHelper = new DatabaseHelper(instance.context);
dbHelper.deleteData();
finish();
Intent mainActivity = new Intent(instance.context, LoginActivity.class);
instance.context.startActivity(mainActivity);
}
database helper.Java
public final class DatabaseHelper extends SQLiteOpenHelper {
public SQLiteDatabase db;
public static DatabaseHelper instance ;
public static Context context;
public static final String DATABASE_NAME = "Oryx.db";
public static final int DATABASE_VERSION = 1;
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// Init the singleton
if (instance == null){
instance = this;
instance.context = context;
instance.db = instance.getWritableDatabase();
}
}
public DatabaseHelper(Context context, String tableCreateQuery)
{
this(context);
instance.db.execSQL(tableCreateQuery);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void deleteData(){
instance.context.deleteDatabase(DATABASE_NAME);
}
}
在DatabaseHelper类中编写方法,您可以在其中扩展SQLiteOpenHelper类
/**
* Delete database
*/
public static void deleteDatabase(Context mContext) {
mContext.deleteDatabase(DATABASE_NAME);
}
然后你可以像DatabaseHelper.deleteDatabase(mContext);
一样直接打电话
谢谢。
原来我必须关闭数据库并将实例设置为null。结合答案Pratik提供它的工作原理。
public static void closeDatabase(){
instance.db.close();
instance = null;
}
public static void deleteDatabase(Context mContext){
mContext.deleteDatabase(DATABASE_NAME);
}
replace finish(); with finishAffinity();或者你也可以试试
mainActivity .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
mainActivity .addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
删除数据库使用以下方法
public void clearDate()
{
try {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DATABASE_NAME, null, null);
db.close(); // Closing database connection
} catch (SQLiteException ex) {
}
}