0

sqliteデータベースをAndroidアプリにインポートしようとしています。ここで別の質問のソリューションコードを見ました。

私はそれをやろうとしましたが、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)
4

1 に答える 1

0

アプリに初期DBファイルを同梱しようとしている場合は、「アセット」ディレクトリに移動し、開始時にコピーする必要があります(まだ存在しない場合)。

これは私が過去にこれを処理した簡単な方法です。このコードは私の一部ですSQLiteOpenHelpercreateDatabasectorで起動します):

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();
}
于 2013-03-09T15:48:59.940 に答える