Подтвердить что ты не робот

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

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

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

settings.setDomStorageEnabled(true);
4b9b3361

Ответ 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/");

это работает