2012-03-20 3 views
0

안드로이드 앱을 만들었습니다. 데이터베이스를 사용하고 있습니다. 휴대 전화에 .apk 파일을 설치했는데 정상적으로 작동합니다. 하지만 에뮬레이터를 사용하는 동안 데이터베이스에 입력 한 데이터가 표시되지 않습니다. 이전에 채워진 데이터베이스 테이블을 사용해야합니다. 데이터베이스가 런타임에 생성되지 않습니다. 데이터베이스에서 앱이 완벽하게 실행되는 것을 확인하려면 어떻게 휴대 전화의 데이터베이스를 가져올 수 있습니까?안드로이드 폰의 앱에서 사전 구축 된 데이터베이스 사용

답변

1

assets 또는 res/raw 디렉토리에 데이터베이스 파일을 저장할 수 있습니다. 응용 프로그램의 처음 시작시 데이터베이스 파일을 /data/data/com.company.yourapp/databases/으로 복사하고 평소와 같이 데이터베이스를 열 수 있습니다. assets에서 파일이없는 동안

assetsres/raw 디렉토리에서 저장 파일의 차이는, res/raw에서 파일이 압축되어 있다는 점이다. res/raw 아래의 파일은 Android 2.3 이전에는 1MB를 초과 할 수 없습니다. 그래서 데이터베이스 파일을 직접 압축하여 assets에 저장하고 코드에 GZIPInputStream을 사용하여 파일의 압축을 푸는 것이 좋습니다.

+0

내가 가지고있는 데이터베이스 파일을 어떻게 복사 할 수 있습니까? –

0

데이터베이스가 필요하다면 테스트 용 응용 프로그램을 사용해야합니다. 그런 다음 sdcard로 내 보내야한다고 생각합니다.

public static void exportfile(String applicationPackageName,String databaseName,String pathOfFolder) throws FileNotFoundException, IOException 
    { 
       InputStream myInput; 

       myInput = new FileInputStream("/data/data/"+applicationPackageName+"/databases/"+databaseName); 

       File directory = new File("/sdcard"+pathOfFolder); 

       if (!directory.exists()) 
       { 
        directory.mkdirs(); 
       } 

       OutputStream myOutput = new FileOutputStream(directory.getPath()+"/"+databaseName); 

       byte[] buffer = new byte[1024]; 
       int length; 
       while ((length = myInput.read(buffer))>0) 
       { 
        myOutput.write(buffer, 0, length); 
       } 

       myOutput.flush(); 
       myOutput.close(); 
       myInput.close(); 

    } 

applicationPackageName : - 응용 프로그램 패키지 이름이

여기서 databaseName - 데이터베이스 파일 이름이

pathOfFolder : - SDCARD에서 파일을 내보낼 폴더의 경로가

가 잊지 마세요 추가 할 매니페스트 파일에 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

그리고 SQLite Manager를 다운로드하여 해당 파일을 엽니 다.

감사합니다. 당신을 돕기를 바랍니다.

+0

이 답이 도움이된다면 그것을 수락하는 것을 잊지 마십시오. –

관련 문제