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