안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요!
새해 복많이 받으세요
A 쪽 Activity에 Spinner위젯에 Cursor 리스트를 담아두고
A Activity에서 Intent로
B Activity
C Activity 로 왔다 갔다 합니다.
근데 각 Activity마다 똑같은 Spinner값들이 뿌리기 위해서
SQLite에 Query를 날리게 됩니다.
그리고 왔다갔다 하니까 계속 Cursor때문인지 알수 없는Excepion이 발생이 되고 있습니다.
이거 하나의 Spinner값을 공유 할수 없는지 궁금합니다.
그리고 하나더 .
Cursor 값 리스트들을 SimpleCursorAdapter로 담고 다니게 구현을 했습니다.
문제는 SimpleCursorAdapter에 Cursor를 넣고 finnally로 cursor.close();로 닫아 버리면
//생략
SpinnerAdapter spadapter = null;
Cursor cursor = managedQuery(MCLNTDAOHelper.Constants.CONTENT_URI
, ConsIF.MCLNTDAO
, null
, null
, null);
try
{
spadapter = new SimpleCursorAdapter( this
,android.R.layout.simple_spinner_item
,cursor
,new String[] {MCLNTDAOHelper.Constants.TSA_MCL_NM,MCLNTDAOHelper.Constants._ID}
,new int[] {android.R.id.text1 ,android.R.id.text2});
}finally{
cursor.close();
}
SimpleCursorAdapter에 Cursor값들이 모두 날라 가버리는군여.
cursor.close();를 어느 시점에 해줘야 할지 모르겠군여..
새해 복많이 받으세요
A 쪽 Activity에 Spinner위젯에 Cursor 리스트를 담아두고
A Activity에서 Intent로
B Activity
C Activity 로 왔다 갔다 합니다.
근데 각 Activity마다 똑같은 Spinner값들이 뿌리기 위해서
SQLite에 Query를 날리게 됩니다.
그리고 왔다갔다 하니까 계속 Cursor때문인지 알수 없는Excepion이 발생이 되고 있습니다.
이거 하나의 Spinner값을 공유 할수 없는지 궁금합니다.
그리고 하나더 .
Cursor 값 리스트들을 SimpleCursorAdapter로 담고 다니게 구현을 했습니다.
문제는 SimpleCursorAdapter에 Cursor를 넣고 finnally로 cursor.close();로 닫아 버리면
//생략
SpinnerAdapter spadapter = null;
Cursor cursor = managedQuery(MCLNTDAOHelper.Constants.CONTENT_URI
, ConsIF.MCLNTDAO
, null
, null
, null);
try
{
spadapter = new SimpleCursorAdapter( this
,android.R.layout.simple_spinner_item
,cursor
,new String[] {MCLNTDAOHelper.Constants.TSA_MCL_NM,MCLNTDAOHelper.Constants._ID}
,new int[] {android.R.id.text1 ,android.R.id.text2});
}finally{
cursor.close();
}
SimpleCursorAdapter에 Cursor값들이 모두 날라 가버리는군여.
cursor.close();를 어느 시점에 해줘야 할지 모르겠군여..
2010.02.15 04:46:27
음..
Destroy 위치는 저도 알고 있습니다.
Cursor를 지역 변수로 사용할경우
메소드에서만 Cursor를 선언했을때 어떻게 해줘야 하는지 질문이였습니다.
public void CursorTest()
{
//지역변수로 사용함
Cursor cursor = .....생략
}
계속 답변들이 빗나가는걸 보면 제가 질문을 올릴때 잘못 올리긴 잘못 올리나봅니다.
Destroy 위치는 저도 알고 있습니다.
Cursor를 지역 변수로 사용할경우
메소드에서만 Cursor를 선언했을때 어떻게 해줘야 하는지 질문이였습니다.
public void CursorTest()
{
//지역변수로 사용함
Cursor cursor = .....생략
}
계속 답변들이 빗나가는걸 보면 제가 질문을 올릴때 잘못 올리긴 잘못 올리나봅니다.
2010.02.15 08:24:04
SimpleCursorAdapter 에서 Cursor가 Close 가 되었을때 값이 사라지는 것은 당연한 것이구요,
지역변수로 Cursor 값을 받아 왔으면 그 지역 변수 Cursor 가 사라지기 전에 다른 곳으로 값을 넘기던지
아니면 다른 전역 저장소에 저장을 해야 할 것 같네요.
그리고 위에서 "왔다갔다 하니까 계속 Cursor때문인지 알수 없는Excepion이 발생이 되고 있습니다.
이거 하나의 Spinner값을 공유 할수 없는지 궁금합니다." 라고 하셨는데요. Cursor 로 저장된 값을 여러군데에서 계속 가지고 온다고 해서
Exception 이 발생하지는 않을 것 같고, 불러오는 방법에 문제가 있는 것으로 보입니다.
2010.02.15 08:28:27
그리고 A,B,C 3개의 Activity 가 똑같은 DB 에서 값을 가지고 와야 한다면 각각의 Activity 에서 DB에
접근하지 마시고, Class 하나를 따로 만들어서 그 파일에서 DB에사 값을 가져 오는 부분을 만드시고,
처음 실행되는 Activity 에서 그 클래스 생성해서 사용하시면 3군데에 중복 코드가 안들어가도 되고 원하시는
데이터 공유도 수월해 지실 것으로 생각됩니다.
접근하지 마시고, Class 하나를 따로 만들어서 그 파일에서 DB에사 값을 가져 오는 부분을 만드시고,
처음 실행되는 Activity 에서 그 클래스 생성해서 사용하시면 3군데에 중복 코드가 안들어가도 되고 원하시는
데이터 공유도 수월해 지실 것으로 생각됩니다.
Destroy를 오버라이드해서 여기서 close를 해주면 될듯합니다.. 인텐트로 액티비티 전환할때도 Destroy가 호출되거든요.. 근데 커서를 꼭 close를 해줘야 하나여-_- 여태 한번도 close안해줬는데...쿨럭;;