курсор Android не закрыт ошибка - PullRequest
0 голосов
/ 26 октября 2011

Я использую следующую процедуру в моем адаптере базы данных.Каждый раз, когда он вызывается, создается сообщение об ошибке «Приложение не закрыло курсор».

Я не вижу, как я могу закрыть курсор, кроме как я, так как я не открываю его ввызывающая рутина.Это используется в адаптере дисплея в списке.

Я звоню с:

int cnt = mDbHelper.dbio_rcount ("выберите количество (*) из mytable где field1 = 'V'));

public int dbio_rcount( String p_query )
{
    int v_ret = 0 ;
    Cursor mCursor = null ;

    try
    {
        mCursor  = mDb.rawQuery( p_query, null );
    }catch (SQLException e) {}

    if  (  ( mCursor != null )
        && ( mCursor.moveToFirst()) )
    {
        v_ret  = mCursor.getInt( 0 );
    }
    mCursor.close();

    return v_ret ;
}

1 Ответ

5 голосов
/ 26 октября 2011

Я предполагаю, что вы получаете исключение при вызове mCursor.moveToFirst (), который означает, что ваше приложение падает до того, как произойдет mCursor.close (). Обычно я проверяю mCursor.getCount ()> 0, прежде чем вызывать moveToFirst () .. Но это только я ... Я бы предложил следующее:

 public int dbio_rcount(String p_query)
 {
       int v_ret = 0 ;
       Cursor mCursor = null ;

       try
       {
           mCursor  = mDb.rawQuery(p_query, null);
           if (mCursor != null && mCursor.getCount() > 0)
           {
              mCursor.moveToFirst();
              v_ret  = mCursor.getInt( 0 );
           }
       } catch (SQLException e) {
         Log.e(TAG, "sql exception in dbio_count", e);            
       } catch(Exception ex) {
         Log.e(TAG, "other exception in dbio_count", ex);
       } finally {
         if (mCursor != null) {
           mCursor.close();
         }
       }

       return v_ret ;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...