I am expanding my application with a neat “delete all”-function in my Preferences.
What i want from it? Just to, drop the table, delete all inputs… But no… It just gives me an NPE.
And now, i am really clueless…
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;
}
});
And the function explained in databasehelper.
public void deleteAll() {
SQLiteDatabase dB = mDbHelper.getWritableDatabase();
dB.execSQL("DROP TABLE "+DATABASE_TABLE);
}
But, it throws an NPE…
I’ve also tried with:
dB.delete(DATABASE_TABLE,null,null);
But with same result… What am i doing WRONG!? 🙁
SOLUTION
Prefs.java
mDbHelper.deleteDatabase(getBaseContext()); // <-- i used this.
DatabaseHelper.java
public boolean deleteDatabase(Context context) {
return context.deleteDatabase(DATABASE_NAME);
}
Worked perfectly! Thanks!
Why not deleting the database instead?
It will be recreated next time you open it.
It will return false if, for whatever reason, it couldn’t delete it.