IllegalStateException на закрытом курсоре - PullRequest
1 голос
/ 18 июня 2010

Похоже, что мой вопрос связан со следующим вопросом:

Как обработать код IllegalStateException для курсора?

Код для метода-нарушителя выглядит следующим образом:

    public boolean isPermanent(String screen_name) {
    boolean output = false;
    try {
        Cursor c = mDb.query(USERS, new String[] {PERMANENT}, NAME + "='" + screen_name + "'", null, null, null, null);
        if (c != null && c.getCount() > 0) {
            c.moveToFirst();
            output = c.getString(0).contentEquals("C");
            c.close();
        }
    }
    catch (Exception e) {
        Log.e("DBERR", e.getMessage());
    }
    return output;
}

Тем не менее, я смотрю на рассматриваемый Курсор, когда возникает исключение, я вижу следующее в Eclipse:

this    SQLiteCursor  (id=830061188288) 
mClosed true    
mColumnNameMap  null    
mColumns    String[1]  (id=830061188608)    
mContentObservable  ContentObservable  (id=830061188456)    
mContentResolver    null    
mCount  0   
mCurrentRowID   null    
mCursorState    0   
mDatabase   SQLiteDatabase  (id=830060407768)   
mDataSetObservable  DataSetObservable  (id=830061188408)    
mDriver SQLiteDirectCursorDriver  (id=830061143904) 
mEditTable  "users" (id=830060403008)   
mInitialRead    2147483647  
mLock   null    
mMaxRead    2147483647  
mNotificationHandler    null    
mNotifyUri  null    
mPendingData    false   
mPos    -1  
mQuery  SQLiteQuery  (id=830061143936)  
mRowIdColumnIndex   -1  
mSelfObserver   null    
mSelfObserverLock   Object  (id=830061188504)   
mSelfObserverRegistered false   
mStackTraceElements null    
mUpdatedRows    HashMap  (id=830061144056)  
mWindow null    

И это ясно показывает, что состояниеКурсор закрыт, как и должно быть - так есть ли у кого-нибудь какие-либо подсказки относительно того, почему это должно вызывать исключение?

1 Ответ

1 голос
/ 18 июня 2010

Вместо проверки c.getCount ()> 0, проверьте c.moveToNext ():

try{
...
    if (c != null && c.moveToNext())
    //do your thing here and don't call moveToFirst()
} finally {
    if (c != null)
    c.close();
}

И переместиться близко к окончанию {}

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