Показаны сообщения с ярлыком проблемы. Показать все сообщения
Показаны сообщения с ярлыком проблемы. Показать все сообщения

суббота, 8 октября 2011 г.

Я обожаю эту ... компанию

Сегодня, добавив очередную небольшую функцию в свое приложение Google App Engine получил очередной жестокий облом:

08.10.2011 21:55:38 org.datanucleus.store.query.AbstractJDOQLQuery <init>

WARNING: Candidate class for JDOQL single-string query (Commander) could not be resolved

Потратив массу времени выяснил
Вот так работает:

Query query = pm.newQuery(Commander.class);
query.setFilter("name == nameParam");
query.declareParameters("String nameParam");

Вот так нет:

Query query = pm.newQuery("select from Commander " +
"where name == nameParam " +
"parameters String nameParam");

И тот и другой код один в один повторяют примеры из руководства. Так какого же хрена?

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

Продолжение не заставило себя ждать.

пятница, 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.

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