2016-10-25 10 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

)(仕上げを交換してください。 with finishAffinity(); またはあなたもこの方法

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

      db.delete(DATABASE_NAME, null, null); 

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

addFlagsのおかげで、少し助けてくれた! – Jordy

1

あなたはその後、

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

SQLiteOpenHelperクラスを拡張してきたDatabaseHelperクラスのWriteメソッドをfollingデータベースの使用をdeleteingため

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

を試すことができます直接電話することができますDatabaseHelper.deleteDatabase(mContext);

ありがとうございます。

+0

ニースの練習だが、これはまだやっていない。同じ結果ですが、私は静的な呼び出しよりはるかにクリーンなので、私はこのメソッドを維持します。 – Jordy

関連する問題