Мое HTML-приложение для Android теряет значения, хранящиеся в localStorage, когда оно выключается. Кто-нибудь еще видит эту проблему? - PullRequest
20 голосов
/ 03 июня 2010

У меня есть нативное приложение Android 2.1, которое поддерживает веб-просмотр. Я загружаю сайт, который содержит JavaScript, который использует функцию LocalStorage. Когда приложение работает, localStorage работает нормально. Когда некоторые пользователи выходят из приложения и перезапускают его, все значения исчезают. Я не вижу этой проблемы в моем Motrola Droid или Sprint EVO, но есть сообщения пользователей в этой проблеме.

Кто-нибудь знает, что мне не хватает? Я устанавливаю для следующего флага значение true.

settings.setDomStorageEnabled(true);

Ответы [ 5 ]

17 голосов
/ 17 мая 2011

Чтобы локальное хранилище работало для вашего собственного 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.

11 голосов
/ 28 октября 2013

Просто для завершения предыдущих ответов, которые не позволили решить проблему в моем случае.

Я работаю с 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.

6 голосов
/ 02 апреля 2014

Метод setDatabasePath () устарел на уровне API 19. Я советую вам использовать локаль хранилища следующим образом:

4 голосов
/ 19 октября 2011

нужны только эти две строки:

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
2 голосов
/ 02 мая 2011
// 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/");

это работает

...