Isso acontece por causa de:
db.close();
nos métodos:
void addContact(Contact contact)
public void deleteContact(Contact contact)
Você não deve fechar a conexão com o banco de dados subjacente a menos que realmente não pretendo mais trabalhar com ele. Use
SQLiteOpenHelper:close
, quando você terminar seu trabalho. Além disso, chamadas para
getReadableDatabase()
e getWriteableDatabase()
retornam o mesmo objeto de banco de dados 99% das vezes, e eles não reinicialize a conexão do banco de dados fechada manualmente por você. Não se deixe enganar por esses nomes de métodos.