Повреждение базы данных Webview на Android - PullRequest
0 голосов
/ 22 сентября 2011

Я разрабатываю приложение для Android, которое использует веб-просмотр для отображения веб-страницы.Большая часть моего кода связана с веб-просмотром.Моя основная деятельность содержит веб-просмотр, который отображает определенный веб-сайт.

Я пытаюсь предотвратить ошибку, когда мой webview.db поврежден.Я знаю, что это не обычная ситуация, но я хотел бы убедиться, что мое приложение не будет аварийно завершено.

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

Я добавил метод setUncaughtExceptionHandler для обработки исключения.Я могу поймать исключение, но когда я попытался перезапустить мое приложение, веб-просмотр никогда не завершает загрузку.

Я попробовал следующий код, чтобы «перезапустить» мое приложение:

     Intent i = new Intent(context, Error.class);
                 i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                 i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                 context.startActivity(i);

Моя последняя попытка былабезуспешно, затем я добавил код, который отображает сообщение об ошибке, удаляет базы данных веб-просмотра и закрывает приложение.

    AlertDialog alertDialog = new AlertDialog.Builder(
                    DiscoverMobile.this).create();
            alertDialog.setTitle("Error");
            alertDialog.setMessage("Application files have been deleted or corrupted.  The app will close to fix this issue.  You can restart the app later");
            alertDialog.setButton("OK",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int which) {


                            webview.getContext().deleteDatabase(
                                    "webview.db");
                            webview.getContext().deleteDatabase(
                                    "webviewCache.db");
                            WebViewDatabase webViewDB = WebViewDatabase
                                    .getInstance(getBaseContext());

                            System.exit(0);
                        }
                    });
            alertDialog.show();

Может ли это быть хорошим решением?

1 Ответ

1 голос
/ 11 сентября 2012
Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    view.clearCache(true);
}

Возможно, вы пробовали это, но, возможно, также установите размер кэша WebView на небольшой размерЯ не уверен, что 0 сработает, так что, возможно, 1:

webview.getSettings().setAppCacheMaxSize(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...