Stává se to kvůli:
db.close();
v metodách:
void addContact(Contact contact)
public void deleteContact(Contact contact)
Neměli byste zavírat připojení k podkladové databázi, pokud to skutečně neuděláte nehodláte s ním dále pracovat. Použijte SQLiteOpenHelper:close , až dokončíte svou práci.
Navíc volání getReadableDatabase() a getWriteableDatabase() v 99 % případů vracejí stejný databázový objekt a nedělají znovu inicializovat připojení k databázi, které jste ručně uzavřeli.
Nenechte se zmást těmito názvy metod.