Environment.getExternalStorageDirectory()。getAbsolutePath()不工作并给予/存储 [英] Environment.getExternalStorageDirectory().getAbsolutePath() not working and giving /storage

查看:1206
本文介绍了Environment.getExternalStorageDirectory()。getAbsolutePath()不工作并给予/存储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的code

  MYDB = openOrCreateDatabase(/ SD卡/ FashionGirl / ImagesDB.db,Context.MODE_PRIVATE,NULL);
MYDB = openOrCreateDatabase(DBPATH,Context.MODE_PRIVATE,NULL);

完美地工作,但被给予警告不要硬code/ SD卡/;使用Environment.getExternalStorageDirectory()的getPath(),而不是

所以,我想,

 字符串DBPATH = Environment.getExternalStorageDirectory()getAbsolutePath()+FashionGirl / ImagesDB.db。
MYDB = openOrCreateDatabase(DBPATH,Context.MODE_PRIVATE,NULL);

但奇怪的是,它不工作,在那里Environment.getExternalStorageDirectory()。getAbsolutePath()的值为 /存储

因此​​,它给错误,

  19 12-17:32:02.230:E / SqliteDatabaseCpp(15620):sqlite3_open_v2(/ storageFashionGirl / ImagesDB.db,&安培;手柄,6,NULL)失败
12-17 19:32:02.230:E / SQLiteDatabase(15620):无法打开数据库。关闭它。
12-17 19:32:02.230:E / SQLiteDatabase(15620):android.database.sqlite.SQLiteCantOpenDatabaseException:无法打开数据库文件
12-17 19:32:02.230:E / SQLiteDatabase(15620):在android.database.sqlite.SQLiteDatabase.dbopen(本机方法)
12-17 19:32:02.230:E / SQLiteDatabase(15620):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
12-17 19:32:02.230:E / SQLiteDatabase(15620):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
12-17 19:32:02.230:E / SQLiteDatabase(15620):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:932)

那么,为什么一些由Android不工作建议,我该怎么办?


解决方案

 字符串DBPATH = Environment.getExternalStorageDirectory()getAbsolutePath()+FashionGirl / ImagesDB.db。
MYDB = openOrCreateDatabase(DBPATH,Context.MODE_PRIVATE,NULL);

请不要使用串联构造的文件路径。尝试:

 文件DBPATH =新的文件(Environment.getExternalStorageDirectory(),FashionGirl / ImagesDB.db);
MYDB = openOrCreateDatabase(dbPath.getAbsolutePath(),Context.MODE_PRIVATE,NULL);


  

但奇怪的是,它不工作,在那里Environment.getExternalStorageDirectory()。getAbsolutePath()有值/存储


这是因为 / SD卡已去precated了近三年。

My code

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

worked perfectly, but was giving warning Do not hardcode "/sdcard/"; use Environment.getExternalStorageDirectory().getPath() instead

So I tried,

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

But strangely, its not working, where Environment.getExternalStorageDirectory().getAbsolutePath() has value /storage

So its giving error,

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)

So why something recommended by Android is not working, what should I do?

解决方案

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

Please do not use concatenation for constructing file paths. Try:

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

But strangely, its not working, where Environment.getExternalStorageDirectory().getAbsolutePath() has value /storage

That is because /sdcard has been deprecated for nearly three years.

这篇关于Environment.getExternalStorageDirectory()。getAbsolutePath()不工作并给予/存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆