Environment.getExternalStorageDirectory().getAbsol

2019-05-24 06:11发布

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?

3条回答
Ridiculous、
2楼-- · 2019-05-24 06:43
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

listView = (ListView) findViewById(R.id.list);
List<Employee> employees = null;
try {
    XMLPullParserHandler parser = new XMLPullParserHandler();

    File f = new File("/mnt/extsd/kmls/mykml.kml");

    InputStream is = new FileInputStream(f);

            employees = parser.parse(is);

       ArrayAdapter<Employee> adapter = new ArrayAdapter<Employee>     

this,R.layout.list_item, employees);

    listView.setAdapter(adapter);

    } catch (IOException e) {
        e.printStackTrace();
    }
}

Note : "/mnt/extsd/kmls/mykml.kml" this is the complete path to reach my kml fiel.
   for this first you need to open your sdcard in your device then you find the path   
then the path need to insert into your app.

thanks
查看更多
看我几分像从前
3楼-- · 2019-05-24 06:48

Add / before Fashiongirl

String dbPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/FashionGirl/ImagesDB.db";
查看更多
干净又极端
4楼-- · 2019-05-24 06:55
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.

查看更多
登录 后发表回答