20

WebビューをホストするネイティブのAndroid2.1アプリケーションがあります。LocalStorage機能を使用するJavaScriptを含むサイトをロードします。アプリケーションが実行されている場合、localStorageは正常に機能します。一部のユーザーがアプリケーションを終了して再起動すると、すべての値が失われます。MotrolaDroidまたはSprintEVOでこの問題は発生していませんが、この問題を抱えている現場のユーザーの報告があります。

誰かが私が欠けているものを知っていますか?次のフラグをtrueに設定しています。

settings.setDomStorageEnabled(true);
4

5 に答える 5

18

Android で独自の WebView に対してローカル ストレージを機能させるには、WebView が正しいファイルを使用していること、およびローカル ストレージが次のように有効になっていることを確認する必要があります。

String packageName = "com.dongshengcn.android";
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/"+packageName+"/databases");
settings.setDomStorageEnabled(true);

「com.dongshengcn.android」は、独自の Android アプリ パッケージ名に置き換える必要があります。

于 2011-05-17T14:00:25.753 に答える
11

私の場合、問題を解決できなかった以前の回答を完了するためだけに。

Android 4.1.1 で作業しています。私のアプリは Webview 内でローカル ストレージを使用しており、元の質問と同じ問題が発生していました。ローカル ストレージは、アプリを強制終了するまで正常に動作します。この場合、データが失われました。

以前の回答、特に @diyism からインスピレーションを得て、これで問題を解決することができました。

String databasePath = this.getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath();
settingsMenu.setDatabasePath(databasePath);

実際、 setDatabasePath() のドキュメントに書かれているように: to function correctly, this method must be called with a path to which the application can write.

于 2013-10-28T09:24:21.100 に答える
4

次の 2 行だけが必要です。

this.getSettings().setDomStorageEnabled(true); //enable to use "window.localStorage['my']='hello1'", in webview js on >= android 2.0
this.getSettings().setDatabasePath("/data/data/"+this.context.getPackageName()+"/databases/"); //if no set or wrong path, variables disappear on killed
于 2011-10-19T06:49:04.557 に答える
3
// Confimed on android 2.1 emulator

// enable javascript localStorage


WebSettings webSettings = myWebView.getSettings();

webSettings.setDomStorageEnabled(true);   // localStorage

// eg if your package

// package www.myapp.whatever;

// eg webSettings.setDatabasePath("/data/data/www.myapp.whatever/databases/");

webSettings.setDatabasePath("/data/data/packagename/databases/");

これは動作します

于 2011-05-02T10:47:18.470 に答える