4

私のコード

myDb = openOrCreateDatabase("/sdcard/FashionGirl/ImagesDB.db", Context.MODE_PRIVATE, null);
myDb = openOrCreateDatabase(dbPath, Context.MODE_PRIVATE, null);

完全に機能しましたが、警告を出していましたDo not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead

だから私は試しました、

String dbPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "FashionGirl/ImagesDB.db";
myDb = openOrCreateDatabase(dbPath, Context.MODE_PRIVATE, null);

しかし、奇妙なことに、Environment.getExternalStorageDirectory().getAbsolutePath() が値を持つ場所では機能しません。/storage

そのため、エラーが発生し、

12-17 19:32:02.230: E/SqliteDatabaseCpp(15620): sqlite3_open_v2("/storageFashionGirl/ImagesDB.db", &handle, 6, NULL) failed
12-17 19:32:02.230: E/SQLiteDatabase(15620): Failed to open the database. closing it.
12-17 19:32:02.230: E/SQLiteDatabase(15620): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
12-17 19:32:02.230: E/SQLiteDatabase(15620):    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
12-17 19:32:02.230: E/SQLiteDatabase(15620):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
12-17 19:32:02.230: E/SQLiteDatabase(15620):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
12-17 19:32:02.230: E/SQLiteDatabase(15620):    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:932)

では、なぜ Android が推奨する機能が動作しないのでしょうか? どうすればよいでしょうか?

4

3 に答える 3

5
String dbPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "FashionGirl/ImagesDB.db";
myDb = openOrCreateDatabase(dbPath, Context.MODE_PRIVATE, null);

ファイル パスの作成に連結を使用しないでください。試す:

File dbPath = new File(Environment.getExternalStorageDirectory(), "FashionGirl/ImagesDB.db");
myDb = openOrCreateDatabase(dbPath.getAbsolutePath(), Context.MODE_PRIVATE, null);

しかし、奇妙なことに、Environment.getExternalStorageDirectory().getAbsolutePath() の値が /storage の場合、機能しません。

これは、/sdcardが 3 年近く非推奨になっているためです。

于 2012-12-17T14:12:10.220 に答える
2

追加/前に Fashiongirl

String dbPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/FashionGirl/ImagesDB.db";
于 2012-12-17T14:10:16.257 に答える