在友盟的错误统计,看到这个错误。
然后,找到项目中的代码。代码如下:
TextWatcher withdrawalWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String cash = s.toString();
int length = cash.length();
String zero = Constants.VAR_ZERO;
String dot = Constants.HIDDEN_PREFIX;
if (cash.startsWith(dot)) {
cash = zero + cash;
edtWithdrawal.setText(cash);
edtWithdrawal.setSelection(cash.length());
} else if (cash.contains(dot)) {
if ((length - 1) - cash.indexOf(dot) > 2) {
cash = cash.substring(0, cash.indexOf(dot) + 3);
edtWithdrawal.setText(cash);
edtWithdrawal.setSelection(cash.length());
}
} else if (cash.startsWith(zero) && length > 1 && !cash.substring(1, 2).equals(dot)) {
String subCash = cash.substring(1, length);
edtWithdrawal.setText(subCash);
edtWithdrawal.setSelection(subCash.length());
} else if (length > 1 && (Double.parseDouble(cash) > mCashTotal)) {
String more = cash.substring(0, length - 1);
edtWithdrawal.setText(more);
edtWithdrawal.setSelection(more.length());
}
报错:是问题出现在这里。
else if (length > 1 && (Double.parseDouble(cash) > mCashTotal)) {
String more = cash.substring(0, length - 1);
edtWithdrawal.setText(more);
edtWithdrawal.setSelection(more.length());
}
简要的说下,这个代码的作用,就是判断用户输入的数字(##.##类型),是否大于给定的数字,如果大于,就删除最后一次输入的数据。结果,就出现这样的问题。
后来,测试发现,如果 mCashTotal = 80 edittext 输入数据是33.00,这样不报错。如果点击输入框,在33中间输入一个3,立刻就会报这个错误。
可见,这样的判断有问题。后来,想到另外一种解决办法。就是如果超出,就保留上次的输入值就可以了。代码如下:
如果超过最大值,记录上次的输入值,然后赋值给edittext,光标移到上次的位置,解决问题。