So che questa domanda ha richiesto molte volte in SO, ma non sono riuscito a capire il mio problema esatto.Tentativo di riaprire un oggetto già chiuso: java.lang.IllegalStateException :?
Sto utilizzando il seguente codice per ottenere i dati dal database (Tabella 1) e aggiornare un altro Table2 in base al valore di recupero. Sta funzionando bene in alcune versioni di Android ma quando sono andato a testare con Android 4.0.3. Sto ottenendo questo java.lang.IllegalStateException:?.attempt to re-open an already-closed object
a sum_cursor.moveToNext();
.
Sto usando questo codice in 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();
Il mio metodo di aggiornamento di codifica
/** 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);
}
quello che sto facendo male qui?
So che molti di voi si imbattono in questa situazione. Potresti aiutarmi ragazzi.
Grazie per il vostro aiuto.
Forse aver chiuso il database al di fuori dell'attività asincrona. Hai controllato per quello? –
Il sistema che 4.0.3 è in esecuzione su qualsiasi più veloce degli altri sistemi in uso, in tal caso si potrebbero verificare alcune condizioni di gara. –
No, penso che sia bello .. – GoCrazy