2013-11-22 19 views
3

試圖從數據庫中讀取值,即在WebView中使用JavaScript創建的,但無法獲得使用如何在Android 4.4(API等級:19)中查找數據庫路徑?

getDatabasePath() 

這似乎是過時的數據庫路徑有任何解決方案或解決這一點。

在此先感謝

+0

在文檔'getDatabasePath()'中沒有標記爲棄用。 – Henry

+0

http://developer.android.com/reference/android/webkit/WebSettings.html#getDatabasePath() - @Henry檢查上面的鏈接 – N20084753

+0

我查了一下'android.content.Context.getDatabasePath()'。看到http://developer.android.com/reference/android/content/Context.html#getDatabasePath%28java.lang.String%29 – Henry

回答

2
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); 

從奇巧,我們無法改變的WebView數據庫路徑。缺省數據庫路徑是/ data/data/{軟件包名稱}/app_webview/databases /。對於以下kitkat,我們可以將數據庫路徑設置爲任何位置。

如果要訪問由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(); 
     } 
    } 
} 
相關問題