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?

Se puede mejorar diferenciando (si por el contexto es importante saberlo) cuando el valor obtenido al llamar a la función es realmente cero o si la función nos devuelve cero por un problema. Simplemente se puede solucionar inicializando la variable con algun valor inválido, por ejemplo -1:
int vendorsCount = -1;
Toda la razón le Funes, muchas gracias. Ahora compruebo que se espera de la función y me aseguro de que no nos pasamos por alto el caso que comentas.