java.lang.IllegalStateException: tentative de ré-ouverture d'un objet déjà fermé (Fermeture essayée)
public int getRecordsCount() {
String countQuery = "SELECT * FROM " + TABLE_LOGIN;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
if(cursor != null && !cursor.isClosed()){
cursor.close();
}
// return count
return cursor.getCount();
}
Je suis en train d'essayer d'obtenir le totalnumber d'enregistrements dans la base de données, mais la base de données est plantage à chaque fois avec java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT * FROM login)
. S'il vous plaît aidez-moi avec l'erreur
03-05 22:23:14.208: E/AndroidRuntime(4988): FATAL EXCEPTION: main
03-05 22:23:14.208: E/AndroidRuntime(4988): java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT * FROM login)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:34)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:64)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:283)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:264)
03-05 22:23:14.208: E/AndroidRuntime(4988): at com.ecomm.android.sqlite.DatabaseHandler.getRecordsCount(DatabaseHandler.java:123)
03-05 22:23:14.208: E/AndroidRuntime(4988): at com.ecomm.android.LaunchActivity.DataBaseImplementation(LaunchActivity.java:120)
03-05 22:23:14.208: E/AndroidRuntime(4988): at com.ecomm.android.LaunchActivity.onClick(LaunchActivity.java:98)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.view.View.performClick(View.java:2408)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.view.View$PerformClick.run(View.java:8816)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.os.Handler.handleCallback(Handler.java:587)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.os.Handler.dispatchMessage(Handler.java:92)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.os.Looper.loop(Looper.java:123)
03-05 22:23:14.208: E/AndroidRuntime(4988): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-05 22:23:14.208: E/AndroidRuntime(4988): at java.lang.reflect.Method.invokeNative(Native Method)
03-05 22:23:14.208: E/AndroidRuntime(4988): at java.lang.reflect.Method.invoke(Method.java:521)
03-05 22:23:14.208: E/AndroidRuntime(4988): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
03-05 22:23:14.208: E/AndroidRuntime(4988): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
03-05 22:23:14.208: E/AndroidRuntime(4988): at dalvik.system.NativeStart.main(Native Method)
03-05 22:23:15.608: I/binder_sample(4988): [android.app.IActivityManager,2,1395,com.ecomm.android,100]
03-05 22:23:15.608: I/binder_sample(4988): Unknown binary event type 110
03-05 22:23:15.608: I/binder_sample(4988): Binary log entry conversion failed
source d'informationauteur onkar | 2013-03-11
Vous devez vous connecter pour publier un commentaire.
Vous devriez appeler
getCount()
avant la fermeture de votre curseur.Déplacer:
ci-dessous:
comme ceci:
Votre erreur est renvoyée parce que vous appelez
cursor.getCount()
surCursor
que vous avez déjà et ce n'est pas autorisé.Alors soit essayer d'utiliser essayez-enfin bloc où dans le bloc finally vous fermez votre
Cursor
ou de cédercursor.getCount()
int valeur et à proximitéCursor
immédiatement.Mais je vous recommande l'utilisation de la première approche:
supprimer la
cursor.close()
déclarationJe sais que c'est vieux, mais mon problème a fini par être que dans
onCreate()
j'ai été appelerdb.close()
après l'exécution dedb.execSQL(TABLE_CREATE)
.onCreate
est appelée automatiquement aprèsdbHelper.getReadableDatabase()
.Cela a provoqué le blocage, car alors il est allé à récupérer toutes les valeurs de la base de données avec un objet fermé. Une fois que j'ai enlevé
db.close()
deonCreate
tout a fonctionné.