2011-02-02 10 views
2
02-02 14:31:34.048: WARN/SQLiteCompiledSql(359): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT * FROM 
02-02 14:31:34.048: WARN/SQLiteCompiledSql(359): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
02-02 14:31:34.129: ERROR/Database(359): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here 
02-02 14:31:34.129: ERROR/Database(359):  at 

を避けるために?あなたのonDestroy()メソッド内でclose文を逆にする必要がありはどのようにデシベル近くないと、カーソルの例外この例外を回避するためにどのよう

**DataSQLHelper .class** 

public class DataSQLHelper extends SQLiteOpenHelper { 
private static final String DATABASE_NAME = "test.db"; 
private static final int DATABASE_VERSION = 1; 

    public DataSQLHelper (Context context) { 
super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 



@Override 
public void onCreate(SQLiteDatabase db) { 
    String sql = "create table " + TABLE + "(" + BaseColumns._ID 
    + " integer primary key autoincrement, " + ID + " text, " 
    + PASSWORD + " text, " + ACTIVE + " text, " + STATUS 
    + " text);"; 
    db.execSQL(sql); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
if (oldVersion >= newVersion) 
    return; 

String sql = null; 
if (oldVersion == 1) 
    sql = "alter table " + TABLE + " add note text;"; 
if (oldVersion == 2) 
    sql = ""; 


if (sql != null) 
    db.execSQL(sql); 
} 

     @Override 
    public synchronized void close() { 
        super.close(); 


    } 

} 


    ***Test_Java .java*** 

    public class Test_Java extends Activity { 
    DataSQLHelper helData; 
SQLiteDatabase db; 
Cursor cursor; 


@Override 
public void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    try {  

     helData= new DataSQLHelper(this); 
    cursor = getData(); 
    startManagingCursor(cursor); 

    setContentView(R.layout.view); 


} catch (Exception ex) { 

    } 

    } // onCreate Ends 



private Cursor getData() { 
try { 
    db = helData.getReadableDatabase(); 
    cursor = db.query(DataSQLHelper.TABLE, null, null, 
     null, null, null, null); 
    startManagingCursor(cursor); 
    return cursor; 
} catch (Exception ex) { 
    System.out.println("Exception Occured : " + ex.toString()); 
    return null; 
} 

} 

@Override 
protected void onDestroy() { 
    System.out.println("onDestroy"); 
    super.onDestroy(); 
    if (db!=null){ 
        db.close(); 
       } 
    if (cursor!=null){ 
        cursor.close(); 
    } 

    if (helData!=null){ 
     helData.close(); 
    } 

} 
} 

答えて

0

私は例外を解決しました。私は二回例外が

4

:Plsは

私のコードは以下の通りであるのに役立ちます。 まずデシベル、その後、カーソルをクローズ:

if (cursor!=null){ 
    cursor.close(); 
} 
if (db!=null){ 
    db.close(); 
} 

は、基本的にはデシベルとカーソルを作成/開くの順序を逆にする必要があります。

は、システムからのコールバックである)(この例では、DB /カーソルのonCreateで開かれることに注意してください。そのメソッドを終了する前にカーソル/ dbを閉じることができます。 アプリケーションでは、DataSQLHelperを自由にキャッシュできます。

私のアプリケーションZwitscherでは、上記のレイヤーが気にする必要がないように、SQLHelperクラスのメソッドでdb/cursorの処理全体を行いました。そのTweetDBクラスを参照してください。

+0

を投げている理由私はこのハイコのように与えられた..しかし、まだ..同じ例外を取得し、行が法のgetData()内にあるきthatsの

db = eventsData.getReadableDatabase(); 

を呼んでいました。 db = helData.getReadableDatabase(); &cursor = db.query(DataSQLHelper.TABLE、null、null、 null、null、null、null); – MorningGlory

+0

これは私のコード保護ボイドonDestroy(){ super.onDestroy()です。 IF(!カーソル= NULL){ cursor.close()。 }(DB = NULL!){ db.close()であれば、 } } – MorningGlory

+0

イムも同じ例外を取得。.. plsは助けて – jennifer

関連する問題