Bueno, un poco de autocrítica nunca viene mal y en este caso yo soy uno de los culpables de este desaguisado....
public int getVendorsCount() {
if (this.mDm.openDBConnection()) {
this.mDbHelper = new VendorsDbAdapter();
Cursor cursor = this.mDbHelper.getVendorsCount();
if (cursor != null) {
cursor.close();
return cursor.getCount();
}
this.mDm.closeDBConnection();
}
return 0;
}
Fijaos bien: estamos intentando acceder a un cursor después de cerrarlo..... además solo cerramos la base de datos si el cursor es null... vamos, una joya de código. Gracias a que tenemos test funcionales en Android hemos encontrado semejante esperpento. Ya vamos recuperando poco a poco lo invertido en ellos :) .
Así he dejado el código después del pertinente refactor.
public int getVendorsCount() {
int vendorsCount = 0;
if (this.mDm.openDBConnection()) {
this.mDbHelper = new VendorsDbAdapter();
Cursor cursor = this.mDbHelper.getVendorsCount();
if (cursor != null) {
vendorsCount = cursor.getCount();
cursor.close();
}
this.mDm.closeDBConnection();
}
return vendorsCount;
}
¿Bastante mejor no? ¿Alguna sugerencia para mejorarlo todavía más?