Различное поведение с другим устройством в DecimalFormat

У меня есть 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 я набираю в правильном формате (1 000 000), но когда я выпускаю приложение, люди сообщают, что формат стал 1.000000, а затем, когда используется функция вокруг EditText, приложение вылетает, в отчете о сбое магазина говорится, что это NumberFormatException. Что может быть причиной этого и как мне обойти это?

это могут быть arabic числа. прежде чем делать что-либо в своем конвертере, вы должны проверить arabic числа и решить.

lvl4fi4 22.06.2019 12:14
0
1
211
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

Другие вопросы по теме