Android Cursor object can be used even after closing it, why?

110 Views Asked by At

I am just trying to understand how the cursor works. So, I tried the below code where I close the Cursor first & then try to use it.

I assumed that it will throw some exception or error when I will try to call any method on the cursor object after closing it. But it didn't throw any exception or error, and all its methods can be called even after closing.

getMemberCursor(clientId) method returns the cursor object after db query.

Please, guide me to understand why the cursor is working even after calling its close() method on it?

public List<MemberDAO> getMemberList(long clientId) {
    List<MemberDAO> memberItemArrayList = new ArrayList<>();
    try(Cursor cursor = getMemberCursor(clientId)) {
        cursor.close();
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                do {
                    memberItemArrayList.add(getMemberItemFromCursor(cursor));
                } while (cursor.moveToNext());
            }
        }
    }
    return memberItemArrayList;
}




private MemberDAO getMemberItemFromCursor(Cursor cursor) {
        final MemberDAO memberDAO = new MemberDAO();
        memberDAO.setMemberId(cursor.getLong(cursor.getColumnIndex(MEMBER_USER_ID.getValue())));
        memberDAO.setMemberLocalName(cursor.getString(cursor.getColumnIndex(LOCAL_NAME.getValue())));
        memberDAO.setMemberGlobalName(cursor.getString(cursor.getColumnIndex(GLOBAL_NAME.getValue())));
        memberDAO.setMemberImageUrl(cursor.getString(cursor.getColumnIndex(IMGURL.getValue())));
        memberDAO.setMemberPosition(cursor.getString(cursor.getColumnIndex(POSITION.getValue())));
        memberDAO.setMemberCompany(cursor.getString(cursor.getColumnIndex(COMPANY.getValue())));
        return memberDAO;
}
0

There are 0 best solutions below