У меня есть 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. Что может быть причиной этого и как мне обойти это?
Оказалось, что проблема с локалью, код, который я там использовал, не предоставляет настройки локали, что приводит к другому формату, если другое устройство использует другую локаль. Итак, я реализую этот код:
DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.ENGLISH);
DecimalFormat formatter = new DecimalFormat("###,###,###", symbols);
И он отлично работает с устройством с другой локалью.
это могут быть
arabicчисла. прежде чем делать что-либо в своем конвертере, вы должны проверитьarabicчисла и решить.