2013-03-09 2 views
0

내 안드로이드 앱에 sqlite 데이터베이스를 가져 오려고합니다. 나는 여기에 다른 질문의 해결책 코드를 보았다.안드로이드 앱에 sqlite를 가져 오는 데 문제가 있습니다.

나는 그것을 시도했지만 얻는 것. unfortunately application has stopped 오류.

어떻게 해결할 수 있습니까? (있는 경우

03-09 13:05:14.932: E/AndroidRuntime(1092): FATAL EXCEPTION: main 
03-09 13:05:14.932: E/AndroidRuntime(1092): java.lang.Error: ErrorCopyingDataBase 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at com.nasozby.marifetname.Db.createDataBase(Db.java:48) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at com.nasozby.marifetname.Adapter.createDatabase(Adapter.java:28) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at com.nasozby.marifetname.MainActivity.onCreate(MainActivity.java:29) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.Activity.performCreate(Activity.java:5104) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.os.Looper.loop(Looper.java:137) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at android.app.ActivityThread.main(ActivityThread.java:5039) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-09 13:05:14.932: E/AndroidRuntime(1092):  at dalvik.system.NativeStart.main(Native Method) 
+1

이 곳에서하는 것은 당신이 코드를 – DjHacktorReborn

+0

만들기를 게시 복사 데이터베이스에 올바른 경로를 제공하고 있는지 확인하십시오 (이름이 정확하고 assets 폴더에 있는지 확인하십시오). – random

+0

경로가 올바른지 확인하십시오. 나는 그것을 검사했다. – nasozby

답변

0

앱과 초기 DB 파일을 제공하려는 경우, 다음은 "자산"디렉토리로 이동하고 시작에 복사받을 필요가 : 여기

는 logcats 있습니다 그것은 아직 존재하지 않는다). 여기

내가 과거에이 문제를 처리 한 간단한 방법이며,이 코드의 일부입니다 내합니다 (ctor에 오프 createDatabase 화재) SQLiteOpenHelper :

private void createDatabase() { 
    if (!databaseExists()) { 
    Log.i(TAG, "OpenHelper createDatabase, database does NOT exist, will be copied/created..."); 
    try { 
     this.copyDatabase(); 
    } catch (IOException e) { 
     Log.e(TAG, "OpenHelper error copying database " + e.getMessage(), e); 
    } 
    } else { 
    Log.d(TAG, "OpenHelper createDatabase, database exists, leaving it alone"); 
    } 
} 

private void copyDatabase() throws IOException { 

    InputStream is = context.getAssets().open(DB_NAME + ".sqlite"); 

    File dbFile = context.getDatabasePath(DB_NAME); 
    dbFile.getParentFile().mkdirs(); 
    Log.i(TAG, "OpenHelper copyDatabase creating file at path:" + dbFile.getAbsolutePath()); 

    OutputStream os = new FileOutputStream(dbFile.getAbsolutePath()); 

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

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

private boolean databaseExists() { 
    File dbFile = context.getDatabasePath(DB_NAME); 
    return dbFile.exists(); 
} 
관련 문제