如何在Android 4.4(API级别:19)中找到数据库路径?

3
尝试从使用JavaScript在Webview中创建的数据库中读取值,但无法使用以下内容获取数据库路径:
getDatabasePath()

这个似乎已经被弃用了,是否有任何解决方案或变通方法。

提前感谢。


在文档中,getDatabasePath() 没有被标记为已弃用。 - Henry
@Henry,请查看上面链接中的http://developer.android.com/reference/android/webkit/WebSettings.html#getDatabasePath()。 - N20084753
我查了一下 android.content.Context.getDatabasePath()。请参考 http://developer.android.com/reference/android/content/Context.html#getDatabasePath%28java.lang.String%29。 - Henry
自己解决了问题。在KitKat 4.4中,它们似乎将默认数据库位置从{应用程序包名称}/databases/{数据库名称}移动到{应用程序包名称}/app_webview/databases/file__0/{:id},其中id是通过查询Datbases.db获得的Web SQL数据保存的数据库名称。 - N20084753
你能解释一下你在@N20084753做了什么吗?我也在尝试同样的事情,但是无法解决它。 - Parth Doshi
1个回答

4
String webviewDBPath = getFilesDir().getParent() + "/";  // getFilesDir().getParent() returns base path of app private data
if (Build.VERSION.SDK_INT <= 18) { // Below kitkat
    webviewDBPath += <ur old db folder>;
}
webview.getSettings().setDatabasePath(webviewDBPath);

从安卓4.4(KitKat)开始,我们无法更改Webview数据库路径。默认的数据库路径是/data/data/{package name}/app_webview/databases/。在4.4以下版本中,我们可以将数据库路径设置为任何位置。

如果您想访问由websql创建的数据库,则可以从Databases.db查询数据库路径。

public String getWebViewDBPath() {
    if (Build.VERSION.SDK_INT > 18) {
        return "app_webview/databases";
    } else {
        return "{any folder}";
    }
}

public String getDBFileName(ZoomRxApp ctx, String dbName) {
    String dbFilePath = getFilesDir().getParent() + "/" +  getWebViewDBPath() + "/Databases.db";
    SQLiteDatabase webSqlDb = SQLiteDatabase.openOrCreateDatabase(dbFilePath, null);
    Cursor result = null;
    String dbFileName = null;
    try {
        String query = "select * from Databases where name like '"+dbName+"'";
        result = webSqlDb.rawQuery(query, null);
        while (result != null && result.moveToNext()) {
            String origin = result.getString(result.getColumnIndex("origin"));
            if(Build.VERSION.SDK_INT <= 18) {
                dbFileName = origin + "/" + result.getString(result.getColumnIndex("path"));
            } else {
                dbFileName = origin + "/" + result.getString(result.getColumnIndex("id"));
            }
            break;
        }
    } catch (RuntimeException e) {
        throw e;
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    finally {
        if(result != null) {
            result.close();
        }
        if(webSqlDb != null) {
            webSqlDb.close();
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接