删除数据库android sqlite

问题描述 投票:0回答:3

我想创建一个注销按钮,它将删除整个数据库并完成当前活动并重定向到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);
   }
}
java android sqlite
3个回答
1
投票

在DatabaseHelper类中编写方法,您可以在其中扩展SQLiteOpenHelper类

/**
 * Delete database
 */
public static void deleteDatabase(Context mContext) {
    mContext.deleteDatabase(DATABASE_NAME);
}

然后你可以像DatabaseHelper.deleteDatabase(mContext);一样直接打电话

谢谢。


1
投票

原来我必须关闭数据库并将实例设置为null。结合答案Pratik提供它的工作原理。

   public static void closeDatabase(){
       instance.db.close();
       instance = null;
   }

   public static void deleteDatabase(Context mContext){
       mContext.deleteDatabase(DATABASE_NAME);
   }

0
投票

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) {
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.