Tôi biết câu hỏi này đã hỏi nhiều lần trong SO, nhưng tôi không thể tìm ra vấn đề chính xác của tôi.Cố gắng mở lại một đối tượng đã đóng: java.lang.IllegalStateException :?
Tôi đang sử dụng mã sau để lấy dữ liệu từ cơ sở dữ liệu (Bảng 1) và cập nhật Bảng 2 khác dựa trên giá trị truy xuất. Nó hoạt động tốt trong một số phiên bản Android nhưng khi tôi đi kiểm tra với Android 4.0.3. Tôi đang nhận được điều này java.lang.IllegalStateException:?.attempt to re-open an already-closed object
tại sum_cursor.moveToNext();
.
Tôi đang sử dụng mã này trong 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();
phương pháp cập nhật của tôi mã hóa
/** 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);
}
gì tôi đang làm sai ở đây?
Tôi biết nhiều bạn gặp phải tình huống này. Bạn có thể giúp tôi không.
Cảm ơn sự giúp đỡ của bạn.
Có lẽ bạn đã đóng cơ sở dữ liệu bên ngoài tác vụ không đồng bộ. Bạn đã kiểm tra điều đó chưa? –
Hệ thống 4.0.3 đang chạy nhanh hơn các hệ thống khác bạn đang sử dụng, nếu bạn có thể có một số điều kiện chủng tộc xảy ra. –
Không, tôi nghĩ điều đó tốt .. – GoCrazy