Разное поведение с другим устройством в DecimalFormat - PullRequest
0 голосов
/ 22 июня 2019

У меня есть EditText, который преобразует пользовательский ввод, например, от 1000000 до 1000000.это код, который я использую в качестве конвертера:

private TextWatcher onTextChangedListener(final EditText editText) {
        return new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                editText.removeTextChangedListener(this);

                try {
                    String originalString = s.toString();

                    Long longval;
                    if (originalString.contains(",")) {
                        originalString = originalString.replaceAll(",", "");
                    }
                    longval = Long.parseLong(originalString);

                    DecimalFormat formatter = new DecimalFormat("###,###,###");
                    String formattedString = formatter.format(longval);

                    //setting text after format to EditText
                    editText.setText(formattedString);
                    editText.setSelection(editText.getText().length());
                } catch (NumberFormatException nfe) {
                    nfe.printStackTrace();
                }

                editText.addTextChangedListener(this);
            }
        };
    }

Когда я попробовал его на эмуляторе (API 25 и 29), он ведет себя правильно, EditText I печатать в правильном формате (1 000 000), нокогда я выпускаю приложение, люди сообщают, что формат стал 1.000000, а затем, когда используется функция около EditText, приложение вылетает, в отчете о сбое магазина говорится, что это NumberFormatException.Что может вызвать это и как мне обойти это?

1 Ответ

0 голосов
/ 24 июня 2019

Оказалось, что это проблема с локалью, тот код, который я там использовал, не обеспечивает настройки локали, что приводит к другому формату, если другое устройство использует другую локаль.Поэтому я реализую этот код:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ENGLISH);
DecimalFormat formatter = new DecimalFormat("###,###,###", symbols);

И он отлично работает с устройством с другой локалью

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