昨夜、私はこのコードを自宅で作業していましたが、Whatzit は役に立ちました。すべてが機能しました(dbFileの存在チェックをコメントアウトし、sqliteブラウザーを使用して行いたい変更をデータベースにコピーしました)。
今朝、タブレットを Windows 7 マシンに持ち込み、アプリケーションをアンインストールして、Eclipse から同じコードを実行しようとしました。エラーが発生し続けます:
03-12 11:51:39.320: E/AndroidRuntime(20365): 原因: java.io.IOException: データベースをコピーしようとしています - エラー: /data/data/mypackage/databases/restaurant.db: オープンに失敗しました: ENOTDIR (ディレクトリではありません)
Macでプロジェクトを圧縮し、WindowsマシンのEclipseで同じプロジェクトディレクトリに解凍し、Eclipseでリフレッシュを実行しました。
私が試すかもしれないことについて何か意見が欲しいですか?アプリをアンインストールし、.apk をコピーして再度インストールしようとしましたが、何も機能しないようです。ありがとう。
*私は実際にこれを実際のデバイスで実行しています - Motorola Xoom 4.0.3
private void copyDataBase(File dbFile) throws IOException {
try{
InputStream dbStream = myDbContext.getAssets().open(dbName);
Log.e("In copyDataBase", "Environment Directory: " + Environment.getDataDirectory().canRead());
Log.e("In copyDataBase", "Environment Directory: " + Environment.getDataDirectory().canWrite());
Log.e("In copyDataBase", "Environment Directory: " + Environment.getExternalStorageDirectory());
Log.e("In copyDataBase", "opened up file " + dbName + " successfully. - trying " + path.toString());
OutputStream newDbFile = new FileOutputStream(DB_PATH + dbName);
byte[] buffer = new byte[1024];
int length;
while((length = dbStream.read(buffer)) > 0){
newDbFile.write(buffer);
}
newDbFile.flush();
newDbFile.close();
dbStream.close();
}
catch(IOException e){
throw new IOException("trying to copy the database - ERROR: " + e.getMessage());
}
}
canWrite と canRead の結果は両方とも false として返されます。ここに入力しているように、これは問題なく機能していました。eclipse と同じバージョンを実行している Windows マシンにタブレットを接続すると、違いが生じる理由がわかりません。