2010-06-10 4 views
6

내 질문에 아주 간단하다고 생각되지만 답변이 될 것 같지 않습니다. 내 응용 프로그램에 포함 할 콘텐츠가 상당히 많습니다. 제대로 실행하려면 데이터베이스에 모든 정보를 넣을 생각이고 은 시장에있는 응용 프로그램과 함께 포함 된 데이터베이스에 배포합니다. 유일한 문제는 내가 그 일을하는 방법을 모른다는 것입니다. Eclipse DDMS에서 내 데이터베이스의 내용으로 .db 파일을 추출 할 수 있다는 것을 알고 있으며 내 응용 프로그램의 자산 폴더에 넣어야한다고 가정하지만 응용 프로그램을 사용하여 응용 프로그램을 다시 생성하는 방법 데이터 베이스? 일부 코드 또는 도움말에 대한 링크가 있으면 좋을 것입니다. 감사분산 응용 프로그램의 .apk에 데이터베이스 포함 [Android]

답변

12

그럼 당신이 요구하는지 무엇을 달성하기 위해, 당신은 ..... 앱을 시작 자산/디렉토리에 .DB 파일을 넣고 제자리에 처음으로 복사 할 수

final String DB_DESTINATION = "/data/data/YOUR_PACKAGE_NAME/databases/MyDatabaseFile.db"; 

// Check if the database exists before copying 
boolean initialiseDatabase = (new File(DB_DESTINATION)).exists(); 
if (initialiseDatabase == false) { 

    // Open the .db file in your assets directory 
    InputStream is = getContext().getAssets().open("MyDatabaseFile.db"); 

    // Copy the database into the destination 
    OutputStream os = new FileOutputStream(DB_DESTINATION); 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = is.read(buffer)) > 0){ 
     os.write(buffer, 0, length); 
    } 
    os.flush(); 

    os.close(); 
    is.close(); 
} 

여기서 "initialiseDatabase"는 앱이 처음 시작되었는지 나타내는 플래그입니다.

많은 데이터를 저장하려는 경우 언급 한 바와 같이 APK 파일을 부 풀리지 않고 인터넷 연결을 사용하여 (호스트 된 서버에서) 데이터베이스 레코드를 다운로드 한 후 앱이 출시되었습니다. 이렇게하면 사용자가 앱을 사용하기 시작하는 데 오랜 시간 동안 기다리는 이유를 나타내는 진행률 표시 줄을 표시 할 수 있습니다. 특히 APK를 크게 만들면 사람들이 처음 설치하는 것을 방해합니다.

+0

이전에 진행률 표시 줄을 사용하고 있었지만 많은 사진을 다운로드하고 XML , 그것은 와이파이 대신에 3G 네트워크를 사용하는 경우 특히 많은 시간이 걸립니다 – Sephy

+0

그냥 부울을 사용하는 대신 데이터베이스가 이미 존재하는지 확인하는 것이 더 쉽지 않습니까? 응용 프로그램이 종료 될 때 어떻게 부울을 추적합니까? DB에 항목이 있습니까? – Sephy

+0

정확히 부울이 나타내는 내용이므로 구현 연습으로 남겨 둡니다. 예제 코드를 어떻게 업데이트 할 것인지 업데이트했습니다. – seanhodges

1

중급 솔루션을 구현할 수 있습니다. 위의 방법을 사용하지만 db 파일을 배포하는 대신 어딘가에 서버에 저장하십시오. 내 경험에 따르면 파일을 처리하는 데 10 % 밖에 걸리지 않으며 나머지는 구문 분석하고 이미지를 db로 serialize합니다.

+0

사실 내 목적은 서버에 설치하는 것을 피하고 응용 프로그램을 설치 한 직후 다운로드를 강제하는 것입니다 ... – Sephy

+0

나는 이해합니다. 내 애플 리케이션을 위해 그것을 고려했지만 그때 나는 DB 크기와 또 다른 350K를 보았다. 사람들은 그것에 대해 까다 롭지 만, 괜찮은 연결이 있다면 그것은 후속 처리를 통해 단편적인 다운로드보다 확실히 빠를 것입니다 – Bostone

관련 문제