2012-12-02 111 views
1

當我在使用getPesoCount()像:重新打開已經關閉

Log.v("SQL", String.valueOf(getPesoCount())); 

我得到一個錯誤:

FATAL EXCEPTION: main
java.lang.IllegalStateException: attemp to re-open an already-closed object: android.database.sqlite.SQLiteQuery(mSql = SELECT * FROM pesoTable)...

public void addPeso(int peso, String date) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_PESO, peso); // Contact Name 
     values.put(KEY_DATE, date); // Contact Phone Number 

     // Inserting Row 
     db.insert(TABLE_PESO, null, values); 
     Log.v("SQL", String.valueOf(getPesoCount())); 
     db.close(); // Closing database connection 

    } 


    public int getPesoCount() { 
     String countQuery = "SELECT * FROM " + TABLE_PESO; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 
     cursor.close(); 

     // return count 
     return cursor.getCount(); 
    } 

如果我不使用getPesoCount(),不會發生錯誤。

有人可以幫助我嗎?

+0

刪除此行'cursor.close();' –

+0

感謝TE快速awnser :)我已經使用的另一種方法 – user1870983

+0

我加了:INT C = cursor.getCount();在cursor.close()之前,然後返回c; – user1870983

回答

2
attempt to re-open an already-closed object: 

異常告訴你很多!

如果你想使用cursor進一步不要撥打電話cursor.close();當你確定你不需要它了。

+0

他的問題可能與db.close(),而不是cursor.close() –

0
public void addPeso(int peso, String date) { 
     SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_PESO, peso); // Contact Name 
     values.put(KEY_DATE, date); // Contact Phone Number 

     // Inserting Row 
     db.insert(TABLE_PESO, null, values); 
     Log.v("SQL", String.valueOf(getPesoCount(db))); 
     db.close(); // Closing database connection 

    } 




    public int getPesoCount(db) { 
     String countQuery = "SELECT * FROM " + TABLE_PESO; 
     Cursor cursor = db.rawQuery(countQuery, null); 
     int count = cursor.getCount(); 
     cursor.close(); 
     return count; 
    } 
相關問題