안드로이드 개발 질문/답변
(글 수 45,052)
갓 안드로이드 입문한 초보입니다.
지금 현재 간단한 디비를 이용하는 프로그램을 만들다가 막히는 부분이 있어서
질문을 드립니다.
제가 디비를 쓰면서 이클립스에서 지원되는 에디터로 컴파일을 하다가 아는 형님이
갤럭시S를 구입하셔서 휴대폰으로 한번 컴파일을 해봐야 겠다고 생각하고 컴파일을
했는데요...
프로그램이 디비랑 연동하는 구문에서 뻗어버리네요..
휴대폰이 아닌 그냥 컴퓨터에서 돌렸을시 잘 돌아갔습니다.
그런대 휴대폰으로 컴파일 할때만 디비를 불러오는 부분에서 뻗어버리네요.
디비를 불러오는 구문을 주석처리후 다시 휴대폰으로 테스트 했을시에는 휴대폰으로도 돌아가서
디비쪽 구문에서 문제라고 생각했습니다.
초보가 알기쉽게 설명좀 해주세요..
그럼 오늘하루도 열 코딩하시고 날씨 더운데 조심하세요.
원하시는 답변일지는 모르겠지만 제 주관적인 설명을 정리해보면 다음과 같습니다
(*) 사전 작업
1. 패키지 내에 있는 assets 이라는 폴더를 확인
2. assets 밑에 database(꼭 이 이름이 아니어도 됨) 라는 하위 폴더를 생성
3. db파일을 assets/database 폴더에 복사
(*) 코딩작업
/*
DB파일을 핸드폰 패키지 설치 폴더에 복사
*/
File outfile = new File("/data/data/com.android.onair/databases/abc.db"); << - 핸드폰에 집어넣을 위치와 db 파일명 (예:abc.db)
(*) 경로명은 규약인것 같습니다... "/data/data/패키지명/databases/"
AssetManager assetManager = getResources().getAssets();
InputStream is = null;
try {
is = assetManager.open("database/abc.db", AssetManager.ACCESS_BUFFER); <<- 아까 db파일을 복사해놓은 위치
(assets 폴더명은 생략)
} catch (IOException e) {
e.printStackTrace();
}
long filesize = 0;
try {
filesize = is.available();
} catch (IOException e) {
e.printStackTrace();
}
if(outfile.length() < filesize){ <<- 파일 사이즈 비교 (제 경우에는 기존 파일과 크기를 비교하여, 작으면 복사를 해야할 필요가 있어서...)
byte[] tempdata = new byte[(int) filesize];
try {
is.read(tempdata); <<-----읽고
} catch (IOException e) {
e.printStackTrace();
}
try {
is.close(); <<-- 읽은거 닫아주고
} catch (IOException e) {
e.printStackTrace();
}
try {
outfile.createNewFile(); <<- 새로운 파일 생성할 준비
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fo = null;
try {
fo = new FileOutputStream(outfile); << 어쩌고 저쩌고 ^^
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
fo.write(tempdata); << --- 물리적 복사 (즉 assets/databses/abc.db 파일을 위에 지정한 핸드폰 경로 속으로 복사)
} catch (IOException e) {
e.printStackTrace();
}
try {
fo.close(); <<---문 닫고
} catch (IOException e) {
e.printStackTrace();
}
}
이상입니다...도움이 되셨으면 좋겠습니다