Другие предлагают, чтобы исключения не использовались, потому что неправильный вход в систему следует ожидать в нормальном потоке, если пользователь ошибается. Я не согласен, и я не понимаю причины. Сравните это с открытием файла ... если файл не существует или недоступен по какой-либо причине, то исключительная ситуация будет выдана платформой. Использование вышеупомянутой логики было ошибкой Microsoft. Они должны были вернуть код ошибки. То же самое для синтаксического анализа, веб-запросов и т. Д. И т. Д.
Я не считаю плохой вход в систему частью нормального потока, это исключение. Обычно пользователь вводит правильный пароль, и файл существует. Исключительные случаи являются исключительными, и вполне нормально использовать исключения для них. Усложнение вашего кода путем распространения возвращаемых значений через n уровней вверх по стеку является пустой тратой энергии и приведет к грязному коду. Сделайте самое простое, что может сработать. Не преждевременно оптимизируйте, используя коды ошибок, исключительные вещи по определению случаются редко, а исключения ничего не стоят, если вы их не выбросите.
Если под «текущей позицией» вы подразумеваете точку где-то на данной странице, я не верю, что это возможно ... по крайней мере, не только из Java. Во всем API WebKit, доступном для Java, отсутствует большая часть всего, что связано с содержимым страниц.
Если у вас есть контроль над содержимым страницы и есть способ узнать эти позиции с помощью встроенного Javascript, вы можете:
] Шаг № 1: Используйте WebView # addJavascriptInterface ()
, чтобы добавить объект с каким-то методом recordPosition ()
, сохраняя информацию там, где это необходимо
Шаг № 2: Создание функция Javascript, которая вызывает recordPosition ()
для внедренного объекта.
, а затем либо:
Шаг № 3a: запускать эту функцию Javascript из самого Javascript (например, на основе щелчка) или
Шаг № 3b: Вызовите loadUrl ("javascript: ...");
в своем WebView
, где ...
заменяется кодом Javascript для запуска функции Javascript с шага № 2.
Восстановление этих позиций должно работать примерно так же: выполнить фактическое восстановление с помощью Javascript, возможно, инициированного кодом Java.
Обратите внимание, что у меня есть Понятия не имею, доступно ли то, что вы хотите (получить / установить текущую позицию) из Javascript, так как я не очень люблю программировать в браузере.
Подход, который я использовал, был следующим:
В методе onSaveInstanceState ()
вычислите, насколько далеко вниз по странице прокрутил пользователь.
int contentHeight = webView.getContentHeight();
int scrollY = webView.getScrollY();
float scrollPercent = ((float) scrollY / ((float) contentHeight));
Сохраните это в комплекте. При восстановлении страницы в методе onCreate ()
дождитесь завершения загрузки страницы (в WebClient.onPageFinished ()
), прокрутите до записанной позиции:
int contentHeight = webView.getContentHeight();
int y = (int) ((float) contentHeight * scrollPercent);
webView.scrollTo(0, y);
float
и вычисление соотношения работает в случае переключения между пейзажем и портретом. onPause ()
, а затем webView.setInitialScale (scale)
, прежде чем вы начнете загружать страницу. scrollPercent> 0
выглядит лучше.