Мое приложение Android Android теряет значения, хранящиеся в localStorage, когда он отключается. Кто-нибудь еще видит эту проблему?
У меня есть собственное приложение Android 2.1, на котором размещен веб-просмотр. Я загружаю сайт, содержащий javascript, который использует функцию LocalStorage. Когда приложение работает, localStorage работает нормально. Когда некоторые пользователи выходят из приложения и перезапускают его, все значения исчезают. Я не вижу этой проблемы в моем Motrola Droid или Sprint EVO, но есть отчет о пользователях в этой области с этой проблемой.
Кто-нибудь знает, что мне не хватает? Я устанавливаю следующий флаг в true.
settings.setDomStorageEnabled(true);
Ответы
Ответ 1
Чтобы локальное хранилище работало для вашего собственного WebView в Android, вам нужно убедиться, что 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" должно быть заменено вашим собственным именем pacakge для Android.
Ответ 2
Только для завершения предыдущих ответов, которые не позволили решить проблему в моем случае.
Я работаю с 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
.
Ответ 3
Метод setDatabasePath() устарел на уровне API 19. Я рекомендую использовать локаль хранилища следующим образом:
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
}
Ответ 4
нужны только эти две строки:
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
Ответ 5
// 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/");
это работает