我正在尝试获取在Android WebView(Webkit,ChromeClient)中工作的HTML5 localStorage示例。但是我没有运气。一切都可以通过电话浏览器运行,而不是通过WebView运行。
活动:
public class BrowserActivity extends Activity {
@Override
public final void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
WebView browser = (WebView) findViewById(R.id.webView);
browser.setHapticFeedbackEnabled(true);
browser.getSettings().setJavaScriptEnabled(true);
browser.getSettings().setSavePassword(false);
browser.getSettings().setDatabaseEnabled(true);
browser.getSettings().setDomStorageEnabled(true);
browser.getSettings().setDatabasePath("/data/data/" + browser.getContext().getPackageName() + "/databases/");
browser.loadUrl("http://my.app.com:10099");
}
}
体现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="RestrictedBrowser"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="16"/>
<application android:label="@string/app_name">
<activity android:name="RestrictedBrowser.BrowserActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Black.NoTitleBar"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
</manifest>
错误
WARN / System.err(3961):
android.database.sqlite.SQLiteConstraintException:列packagename
不是唯一的(代码19)07-12 13:57:43.425:WARN / System.err(3961):at
android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(本机
方法)07-12 13:57:43.425:WARN / System.err(3961):在
android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:857)
WARN / System.err(3961):在
android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
WARN / System.err(3961):在
android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
WARN / System.err(3961):在
android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1665)
WARN / System.err(3961):在
android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1594)
ERROR / SQLiteLog(28735):(14)无法在以下位置打开文件
[00bb9c9ce4]第30241行:07-12 13:57:47.005:ERROR / SQLiteLog(28735):
(14)os_unix.c:30241:(2)打开(/NotificationPermissions.db)-07-12
DEBUG / WebKit(28735):无法从SQLite数据库加载
/NotificationPermissions.db
原因-无法打开数据库文件07-12 13:57:47.005:DEBUG / WebKit(28735):[28735:28758 D / WebKit]
external / webkit / Source / WebCore / platform / sql / SQLiteDatabase.cpp(71):
bool WebCore :: SQLiteDatabase :: open(const WTF :: String&,bool)
最佳答案
必须先创建数据库目录,然后才能使用它。
使用以下代码
String databasePath = browser.getContext().getDir("databases",
Context.MODE_PRIVATE).getPath();
browser.getSettings().setDatabasePath(databasePath);