0

昨夜、私はこのコードを自宅で作業していましたが、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 マシンにタブレットを接続すると、違いが生じる理由がわかりません。

4

1 に答える 1

0

指定されたディレクトリが存在しないというエラーが表示されます。これを新しい仮想デバイスで実行しているのは明らかですか?Android のバージョンは、最初に開発したものと同じですか?

于 2012-03-12T17:03:16.220 に答える