2016-10-25 3 views
0

Я хочу создать кнопку выхода из системы, которая отбросит всю базу данных и завершит текущую деятельность и перенаправит на LoginActivity.удалить базу данных android sqlite

Это действительно работает, но мне нужно перезагрузить приложение, чтобы зафиксировать изменения. Например, когда приложение вернется в 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); 
} 

DatabaseHelper.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); 
    } 
} 

ответ

0

Оказалось, что мне нужно закрыть базу данных и установить экземпляр в значение null. В сочетании с ответом, который Pratik поставил, он работает.

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

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

заменить отделку(); с finishAffinity(); или вы также можете попробовать

mainActivity .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
          mainActivity .addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 

для deleteing использования базы данных феллинг метод

public void clearDate() 
    { 
     try { 
      SQLiteDatabase db = this.getWritableDatabase(); 

      db.delete(DATABASE_NAME, null, null); 

      db.close(); // Closing database connection 
     } catch (SQLiteException ex) { 
     } 
    } 
+0

Спасибо за добавление флагов, помогло мне немного :)! – Jordy

1

метод записи в DatabaseHelper класс, где вы расширили SQLiteOpenHelper класс

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

то может звонить прямо как DatabaseHelper.deleteDatabase(mContext);

спасибо.

+0

Хорошая практика, но это еще не сделало этого. Тот же результат, но я сохраню этот метод, так как он гораздо чище называет его статичным. – Jordy

Смежные вопросы