2011-07-04 4 views
1

私は2つのDB clssesを持っており、1つはアセットから電話機にdbファイルをコピーします。アドレッシング "ファイナライザ内のステートメントを解放します。カーソルのclose()を明示的に呼び出すようにしてください"

私はDB呼び出しを行っていますが、ログにはカーソルを閉じる必要があるという厄介なエラーが発生しています。これは、すべての呼び出しが最後にcursor.close()を持っているので、私は混乱しています。第二の

コード:

public class DatabaseTools extends Common { 


    private Context context; 
    private SQLiteDatabase db; 
    private DatabaseHelper dbHelper; 
    private Cursor cursor; 

    public DatabaseTools(Context context) { 
     this.context = context; 
     dbHelper = new DatabaseHelper(context); 
     db = dbHelper.getWritableDatabase(); 
    } 

    // MARKS 
    public ArrayList<String> getNames(String value) { 
       Names = new ArrayList<String>(); 

       selectStatement = new String[] { DB_COMMON_COL_NAME }; 
       fromStatement = DB_COMMON_COL_VALUE + " = '" + value + "'"; 

      cursor = db.query(
       DB_DISTANCE_TABLE_NAME, 
       selectStatement, 
       fromStatement, 
       null, 
       null, 
       null, 
       null); 

     int distanceIndex = cursor.getColumnIndex(DB_COMMON_COL_NAME); 

     if (cursor.moveToFirst()) { 
      do {     
       distanceNames.add(cursor.getString(distanceIndex)); 

      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 

     return names; 

    } 

答えて

0

はあなたのカーソルをクローズ確保するために、以下の変更を試してみてください。また、コンストラクタでデータベースインスタンスを取得しています。それは良いことではありません。データベースを操作する前にデータベースインスタンスを取得し、終了後すぐにデータベースでclose()を呼び出す必要があります。 db.close()を呼び出すよりもgetNames(String value)メソッドの中でdb = dbHelper.getWritableDatabase()を動かすことをお勧めします。

public ArrayList<String> getNames(String value) { 
      Names = new ArrayList<String>(); 

      selectStatement = new String[] { DB_COMMON_COL_NAME }; 
      fromStatement = DB_COMMON_COL_VALUE + " = '" + value + "'"; 

      cursor = db.query(
      DB_DISTANCE_TABLE_NAME, 
      selectStatement, 
      fromStatement, 
      null, null, null, null); 

      if (cursor != null && cursor.moveToFirst()) { 

       try { 
        int distanceIndex = cursor.getColumnIndexOrThrow(DB_COMMON_COL_NAME); 
        while(cursor.moveToNext()) { 
        distanceNames.add(cursor.getString(distanceIndex));    
        } 
       } finally { 
       if (!cursor.isClosed()) { 
       cursor.close(); 
       } 
      } 

     return names; 

    } 
関連する問題