2014-07-07 2 views
0

같은 클래스에서 커서를 닫습니다 이 활동에 참여하십시오. 활동을 떠날 때이 오류가 표시되지 않습니다.) :안드로이드 - 어떻게 내가 내 dbhelper 클래스 내부에이 기능이이

Finalizing a Cursor that has not been deactivated or closed. database...... 
Application did not close the cursor or database object that was opened here 

매우 긴 오류입니다.

누군가가 c.close();를 사용하라고 말했습니다. 이 같은 반환 C, 뭔가 이상 :

public Cursor getRow(long rowId) { 
     String where = KEY_ROWID + "=" + rowId; 
     Cursor c = db.query(DATABASE_TABLE, ALL_KEYS, where, null, null, null,null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     c.close(); 
     return c; 
    } 

나는 그것을 시도했지만 지금은이 오류를 얻을 :

Access closed cursor 

어떻게해야합니까를? 이 클래스의 커서를 어떻게 닫아야합니까?

+1

반복 한 후 커서를 닫습니다. –

+0

클로저드 커서를 반환합니다. 제거 c.close(); – Ayub

+1

주요 활동 또는 다른 것일 수있는 (커서 반복) 클래스에서 커서를 닫아야합니다. – Ayub

답변

2

ActivityCursor을 닫아야합니다. 의 익숙해 후

Cursor c=getRow(rowID_Value); 
c.close(); 

처럼 DBCursor을 닫아야합니다.

1

getRow 함수를 사용한 후 커서를 닫습니다.

public Cursor getRow(long rowId) { 
     String where = KEY_ROWID + "=" + rowId; 
     Cursor c = db.query(DATABASE_TABLE, ALL_KEYS, where, null, null, null,null, null); 
     if (c != null) { 
      c.moveToFirst(); 
     } 
     return c; 
    } 

Cursor c1 = getRow(rowId); 
//use cursor 
//.... 
if(c1 != null)c1.close(); 

주처럼 사용 ROWID는 긴 형식으로 데이터베이스에서 원하는 행의 값입니다.

편집

활동 클래스 Cursor c1;를 만듭니다.
커서가 null이 아닌지 먼저 확인한 다음 닫습니다.

if(c1 != null)c1.close(); 

는 내가 가지고있는이 같은 문제가

같은이 문제를 해결

if(c1 != null)c1.close(); 
+0

답장을 보내 주셔서 감사합니다. 활동에서 나는 onStop과 onDestrory에서 커서를 닫습니다. 문제는 이것입니다. 내가이 활동에 올 때이 오류를 보여줍니다. 나는 아직 활동 중이므로 활동을 떠날 때 오류가 발생하지 않습니다. – user3718930

+1

@ user3718930 질문에 오류 예외를 게시하십시오. –

+1

@ user3718930 커서가 null인지 확인하십시오. 편집 된 답변을 참조하십시오. –

0

안녕하세요 내가이 얼굴로

c1 = getRow(rowId); 

그리고 중지시 /들의 OnDestroy 가까운 커서로 커서를 얻을 나는 쿼리이고 반환 중임 ArrayList 또는 JSON object이 아닌 cursor

당신은 내가이 lib 디렉토리를

https://github.com/commonsguy/cwac-loaderex

사용 오전 쿼리이 만 기록 세트 재조정에 대한 하나 개의 레코드를 반환을위한

public JSONObject getRow(long rowId) { 
    String where = KEY_ROWID + "=" + rowId; 
    Cursor c = db.query(DATABASE_TABLE, ALL_KEYS, where, null, null, null,null, null); 
    if (c!= null & c.moveToFirst()) { 
     JSONObject jsonObj = new JSONObject(); 

     jsonObj.put("key_Name", c.getString(c.getColumnIndex("your_column_name"))); 
     // do for your all column and return this jsonObj and before returning close cursor 
    } 
    c.close(); 
    return jsonObj; 
} 

을 변경해야 할 수도 있습니다 커서 작동 자체를 관리하고 우리를 되 찾을 것입니다 sqliteCursorLoader

관련 문제