Sé que esta pregunta se ha hecho muchas veces en SO, pero no pude resolver mi problema exacto.Intento de volver a abrir un objeto ya cerrado: java.lang.IllegalStateException :?
Estoy usando el siguiente código para obtener los datos de la base de datos (Tabla 1) y actualizar otra Tabla2 en función del valor de recuperación. Está funcionando bien en algunas versiones de Android, pero cuando fui a probar con Android 4.0.3. Estoy obteniendo este java.lang.IllegalStateException:?.attempt to re-open an already-closed object
en sum_cursor.moveToNext();
.
Estoy usando este código en AsyncTask.
/** Sum of total matched values*/
Cursor sum_cursor = db.gettotalMatchvalue(this);
if(sum_cursor!=null)
{
sum_cursor.moveToFirst();
for(int j=0; j<sum_cursor.getCount();j++)
{
float totalmatchedscore = sum_cursor.getInt(0);
float totalingredients = Float.parseFloat(sum_cursor.getString(sum_cursor.getColumnIndex(APPDatabase.CK_TOTALINCREDIENTS)));
/**average = totalscore/totalingredients*/
double average = totalmatchedscore/totalingredients;
int id = Integer.parseInt(sum_cursor.getString(sum_cursor.getColumnIndex(APPDatabase.CK_ID)));
db.updateAverage(id, average);
sum_cursor.moveToNext(); //Here is the problem
}
}
db.close();
Mi método de actualización de codificación
/** Update average */
public void updateAverage(int id,double average)
{
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(CK_FINALVALUE,average);
db.update(TABLE, values,CK_ID+" = "+id , null);
}
lo que estoy haciendo mal aquí?
Sé que muchos de ustedes se encuentran con esta situación. ¿Podrías ayudarme chicos?
Gracias por su ayuda.
Quizá cerró la base de datos fuera de la tarea asíncrona. ¿Has comprobado eso? –
¿El sistema que 4.0.3 está ejecutando es más rápido que el de los otros sistemas que está utilizando, de ser así podría tener algunas condiciones de carrera ocurriendo? –
No, creo que eso está bien. – GoCrazy