简体   繁体   English

Android Environment.getExternalStorageDirectory()无法正常工作?

[英]Android Environment.getExternalStorageDirectory() not work?

This is my previous code 这是我以前的代码

private static final String ROOTPATH = "/data/data/"; 私有静态最终字符串ROOTPATH =“ / data / data /”;

and I want to change it to use Environment: 我想将其更改为使用环境:

private static final String ROOTPATH = Environment.getExternalStorageDirectory()+"/"; 私有静态最终字符串ROOTPATH = Environment.getExternalStorageDirectory()+“ /”;

but i get this result: 但我得到这个结果:

> 08-12 10:53:09.131: E/SQLiteDatabase(1051):
> android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error
> (code 14): Could not open database 08-12 10:53:09.131:
> E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
> 08-12 10:53:09.131: E/SQLiteDatabase(1051):   at
> android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)

and Here is my work: ........ ........ 这是我的工作:........ ........

private static final String ROOTPATH = Environment.getExternalStorageDirectory()+"/";
private static final String DB_NAME_INDBNAME    = "database.jpg";
private static final String DB_NAME_OUTDBNAME   = "database.db";

...... 
public synchronized static NOLDatabaseHelper getInstance(Context context) {
    if(dbHelper == null) {
         dbHelper = new NOLDatabaseHelper(context);
    }

    return dbHelper;
}


private NOLDatabaseHelper(Context context) {
    super(context, DB_NAME_OUTDBNAME, null, DB_VERSION);
    this.context = context;
}


public void createDatabase() {
    if(!isDatabaseExited()) 
    {
        Log.v(GlobalConfig.TAG, "NO database");
        getReadableDatabase();
        copyDataBaseFromAsset();
    } else {
        Log.v(GlobalConfig.TAG, "Has database");
    }
}


private boolean isDatabaseExited() {
    SQLiteDatabase checkDB = null;
    try {
        checkDB = SQLiteDatabase.openDatabase( ROOTPATH + DB_NAME_OUTDBNAME, null,
                SQLiteDatabase.OPEN_READONLY);
        checkDB.close();
    } catch (SQLiteException e) {}
    return checkDB != null ? true : false;
}


private synchronized void copyDataBaseFromAsset() 
{
    int length                  = -1;
    byte[] buffer               = new byte[1024];
    AssetManager am             = context.getAssets();

    try 
    {
        InputStream assetsDB    = am.open(DB_NAME_INDBNAME);
        String outFileName      = ROOTPATH + DB_NAME_OUTDBNAME;
        OutputStream dbOut      = new FileOutputStream(outFileName);

        while ((length = assetsDB.read(buffer)) > 0) {
            dbOut.write(buffer, 0, length);
        }

        dbOut.flush();
        dbOut.close();
        assetsDB.close();

    } catch(Exception e) {
        Log.e( GlobalConfig.TAG, "copyDataBaseFromAsset error, is say: "+e.toString() );
    }
}

createDatabase() is called from outSide use getInstance(). 从外部使用getInstance()调用createDatabase()。 Is there have any wrong or missing code? 是否有任何错误或丢失的代码? How should I solve this issue? 我应该如何解决这个问题?

Big Thanks~! 非常感谢〜!

Change 更改

 super(context, DB_NAME_OUTDBNAME, null, DB_VERSION);

to

 super(context, ROOTPATH + DB_NAME_OUTDBNAME, null, DB_VERSION);

in your NOLDatabaseHelper constructor and change ROOTPATH to 在您的NOLDatabaseHelper构造函数中,并将ROOTPATH更改为

ROOTPATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Environment.getExternalStorageDirectory()在Android中不起作用 - Environment.getExternalStorageDirectory() not working in Android android Environment.getExternalStorageDirectory()。getPath() - android Environment.getExternalStorageDirectory().getPath() Android 如何使用 Environment.getExternalStorageDirectory() - Android how to use Environment.getExternalStorageDirectory() Android 4.2 - Environment.getExternalStorageDirectory()。getPath()行为 - Android 4.2 - Environment.getExternalStorageDirectory().getPath() behaviour Android如何正确使用Environment.getExternalStorageDirectory() - Android how to use Environment.getExternalStorageDirectory() corretly Android 设备与 Environment.getExternalStorageDirectory()?= /mnt/sdcard/? - Android devices with Environment.getExternalStorageDirectory() != /mnt/sdcard/? 针对Environment.getExternalStorageDirectory()方法的不完整的Android文档 - Incomplete Android documentation for Environment.getExternalStorageDirectory() method Environment.getExternalStorageDirectory()在Android 4.1中不起作用 - Environment.getExternalStorageDirectory() is not working in Android 4.1 Environment.getExternalStorageDirectory()找不到文件android - Environment.getExternalStorageDirectory() not finding file android 到 Environment.getExternalStorageDirectory() 还是不? - To Environment.getExternalStorageDirectory() or not to?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM