java.lang.IndexOutOfBondsException:setSpan(3..3) ends beyond length 2
来源:互联网 发布:数据库三大范式好处 编辑:程序博客网 时间:2024/04/25 14:43
在友盟的错误统计,看到这个错误。
然后,找到项目中的代码。代码如下:
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,光标移到上次的位置,解决问题。
0 0
- java.lang.IndexOutOfBondsException:setSpan(3..3) ends beyond length 2
- java.lang.IndexOutOfBoundsException: setSpan (26 ... 26) ends beyond length 10
- TextView java.lang.IndexOutOfBoundsException: setSpan (27 ... 37) ends beyond length 32
- java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) starts before 0
- SpannableString的setSpan报错java.lang.IndexOutOfBoundsException
- java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
- Android java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
- BaseAdapter java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 dispatchTouchEvent
- java.lang.ArrayIndexOutOfBoundsException: length=2; index=2 异常处理
- Android-71-解决报错: java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
- Beyond Java
- Beyond Java
- 【java】 java.lang.ClassFormatError: Invalid method Code length 错误
- 错误 java.lang.ClassFormatError: Invalid method Code length 的解决办法
- java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
- java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
- java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
- ListView同一个适配器设置不同的item时遇到java.lang.ArrayIndexOutOfBoundsException: length=3; index=3
- U3d基础知识1
- 子线程更新UI,牵扯activity的启动过程
- 【慕课笔记】4-3 字节流之文件输出流FileOutputStream
- 【TomoEngine】 第一讲 太空遨游(一) 创建太阳系
- iso 自有 正反编码
- java.lang.IndexOutOfBondsException:setSpan(3..3) ends beyond length 2
- React-约束组件及无约束组件详解
- Unity3D -- 快速排序
- 131.View the Exhibit and examine the structure of the PRODUCT, COMPONENT, and PDT_COMP tables.
- NSScanner 介绍
- ios开发 各种字体
- extjs labelalign有什么作用
- javascript的内置对象参考
- 关于@property和@synthesize