2016-10-25 2 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(); 또는 당신은 또한 방법 folling 데이터베이스 사용을 삭제 중 위해

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) { 
     } 
    } 
+0

addFlags tho에 감사드립니다. 조금 도와 줬습니다. :) – Jordy

1

당신이 SQLiteOpenHelper 클래스

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

다음 드리고 있습니다 DatabaseHelper 클래스의 쓰기 방법을 사용하면 직접 전화 할 수 있습니다 DatabaseHelper.deleteDatabase(mContext);

감사합니다.

+0

좋은 연습을했지만 아직 트릭을하지 못했습니다. 동일한 결과지만 정적이라고 부르는 훨씬 깔끔한 메서드이기 때문에이 메서드를 사용합니다. – Jordy

관련 문제