2011-12-05 65 views
1

我在我的首選項中用一個整齊的「全部刪除」功能擴展我的應用程序。 我想從它得到什麼?只是,放下桌子,刪除所有的輸入...但是沒有...它只是給了我一個NPE。Android試圖創建一個簡單的「空數據庫」功能,拋出NPE

而現在,我真的無言以對......

Prefs.java

Preference wipeDatabase = findPreference("wipeDatabase"); 
wipeDatabase.setOnPreferenceClickListener(new OnPreferenceClickListener() { 

    public boolean onPreferenceClick(Preference arg0) { 

     AlertDialog.Builder builder = new AlertDialog.Builder(Prefs.this); 
     builder.setMessage("YOU SURE!??!") 
     .setCancelable(false) 
     .setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 

        mDbHelper.deleteAll(); // <-- This is the function. 

       } 
     }) 
     .setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 
     builder.show(); 
     return false; 

    } 
}); 

而且功能databasehelper解釋。

public void deleteAll() { 
    SQLiteDatabase dB = mDbHelper.getWritableDatabase(); 
    dB.execSQL("DROP TABLE "+DATABASE_TABLE); 
} 

但是,它拋出一個NPE ... 我也試過用:

dB.delete(DATABASE_TABLE,null,null); 

但隨着同樣的結果...什麼我做錯了!? :(

SOLUTION

Prefs.java

mDbHelper.deleteDatabase(getBaseContext()); // <-- i used this. 

DatabaseHelper.java

public boolean deleteDatabase(Context context) { 
    return context.deleteDatabase(DATABASE_NAME); 
} 

完美地工作!謝謝!

回答

0

爲什麼不刪除數據庫呢? 這將是recr下次你打開它時會被吃掉。

public boolean deleteDatabase(Context context) { 
    return context.deleteDatabase(DATABASE_NAME); 
} 

如果出於某種原因無法刪除它,它將返回false。

+0

這實際上工作...更新代碼!謝謝! – DreamHawk

+0

很高興它的工作,這也是我在做什麼。我在數據庫中有一個非常複雜的模式,並且不得不刪除所有表格會很痛苦,並且有可能會丟失其中一些表格。在Android中刪除數據庫並重新創建它非常快,它簡化了代碼。 – Guillaume

+0

我只是認爲它會更簡單,只是刪除所有行,並保存數據庫...這將是更少的時間消耗...但我想我錯了:) – DreamHawk

相關問題