Android - первый опыт


Написал первое приложение под Android - калькулятор расчета стоимости печати, с возможностью оформлять заказы в типографии онлайн. Программировать  под Android понравилось, сейчас думаю, чтобы еще написать) А пока небольшой список проблем, с которыми пришлось столкнуться.

1. По сценарию, получив стоимость изготовления буклета или листовки, пользователь должен иметь возможность отправить результаты расчета в типографию, т.е. оформить заказ онлайн. Для этого приложение должно получить разрешение на использование интернета - android.permission.INTERNET. С первого раза у меня это не получилось. Со второго - тоже) Проблема оказалась во мне - вместо "uses-permission" записал в манифесте "user-permission". Стыдно об этом рассказывать, но если погуглить - я не первый, кто наступил на эти грабли)

2. При получении заявки на сервере обнаруживаем в теле письма кракозябры. Решается изменением кодировки при формировании запроса:
String url = Calc.CREATE_ORDER + "?" + URLEncodedUtils.format(vars, "UTF-8");
HttpGet request = new HttpGet(url); 
 3. Проблема с обработкой результата ввода в EditText. Мне нужно было, чтобы стоимость заказа считалась на лету, т.е. в момент, когда пользователь, к примеру, изменяет значение тиража, без дополнительного клика на кнопку "Посчитать", или нажатия клавиши Enter. Сначала обрабатывал ввод через OnKeyListener и события KeyEvent.ACTION_UP - все работало нормально, но только в эмуляторе. В реальном устройстве - только с Enter.
Победил проблему, заменив  OnKeyListener на TextWatcher:
runText.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable arg0) {
String strRunToSave = runText.getText().toString();
updateCost(strRunToSave);
}
 Почему сразу не пошел этим путем - не знаю. Тоже стыдно вспоминать.

4. А вот с этим бился несколько дней - разные результаты вычисления в эмуляторе и на реальном устройстве. Точнее, в эмуляторе стоимость заказа считалась правильно, а на устройстве получал совсем другие цифры. Проблема оказалась в типах данных - вместо  double нужно было использовать big_decimal.

Посмотреть, что в итоге получилось можно здесь.  

Комментарии

Популярные сообщения из этого блога

Конвертируем Ruby-приложение в exe

JQuery и Rails - делаем кнопку "like it" со счетчиком

Резервное копирование базы данных по расписанию