пятница, 29 июля 2011 г.

WebView - вот это номер!

Решил написать свое первое приложение, которое выполнят хоть что-то полезное, а именно выводит прогноз погоды. Сделать это можно по разному, в том числе не просто, а очень просто:


  1. Берем на GisMeteo код HTML информера
  2. Ложим в файлик, файлик кладем в assets
  3. Загружаем файлик в WebView. Не забываем про setSciptEnabled("true")
  4. Вуаля, все здорово


А вот и хрен. WebView говорит - страница недоступна. После непродолжительного траха выясняем, что удаление из файлика содержимого тега <style> лечит эту проблему и наступает счастье. Однако это не есть хорошо, потому как непонятно - а в чем собственно проблема заключалась? Проблем-то, собственно быть не должно изначально. Заметим также, что в браузере (который как бы идентичен WebView данный информер открывается нормально).

Ищем... ага, вот, не я один наступил на эти грабли

В конце концов выясняем. Символы типа % воспринимаются методом WebView.loadData(...) как специальные и он изгаляется над ними с особой жестокостью.

Поэтому передаваемую строку нужно как-то закодировать Как именно, вернее чем, документация этот вопрос скромно умалчивает. Могли бы и ссылочку дать на пример. Решение оказывается простым до безобразия

вместо
mWebView.loadData(data,"text/html" ,"utf-8");
используем
mWebView.loadDataWithBaseURL(null,data,"text/html" ,"utf-8",null);

и ничего, никуда перекодировать не надо. И работает!... один раз. Но тут выясняется что упал Gismeteo.ru. Неужели это я?!!! Да не, навряд ли.

Проверяем:
It's not just you! http://informer.gismeteo.ru looks down from here.

Ну и хрен с ним. На сегодня найдутся другие дела, а более сложный вариант получения погоды рассмотрим завтра

1 комментарий: