【问题标题】:java.lang.IndexOutOfBoundsException: setSpan (2 ... 2) ends beyond length 1java.lang.IndexOutOfBoundsException: setSpan (2 ... 2) 结束超过长度 1
【发布时间】:2017-12-22 22:59:40
【问题描述】:

我遇到了这个异常,我是 android 新手,所以请帮助我。

E/UncaughtException: java.lang.IndexOutOfBoundsException: setSpan (2 ... 2) 结束超过长度 1

    holder.oldLaundriesQuantityEditText.addTextChangedListener(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) {

            if(s.toString().length()>0){
                int editedQuantity = Integer.parseInt(s.toString());

                if(editedQuantity==0){

                    finalHolder.oldLaundriesQuantityEditText.setText("1");

                }
                if(editedQuantity>oldLaundriesModelArrayList.get(position).getRemain_quantity()){

                    finalHolder.oldLaundriesQuantityEditText.setText(String.valueOf(
                            oldLaundriesModelArrayList.get(position).getRemain_quantity()
                    ));

                }

                finalHolder.oldLaundriesQuantityEditText.setSelection(count);
            }

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

【问题讨论】:

  • 这一行是否出现异常? finalHolder.oldLaundriesQuantityEditText.setSelection(count);
  • 是的,我在同一行有异常。

标签: android


【解决方案1】:

当您已经输入长度为 2 的文本时会发生此问题,例如 "10",但剩余数量返回一位数,例如 "9",在这种情况下,计数值为 2。在设置选择时,您是使用计数值,并且只有一个长度为 1 但设置为 2 的字符串。

代替

finalHolder.oldLaundriesQuantityEditText.setSelection(count);

使用

finalHolder.oldLaundriesQuantityEditText.setSelection(finalHolder.oldLaundriesQuantityEditText.getText().toString().trim().length());

为了更好,更清洁,存储价值

String.valueOf(oldLaundriesModelArrayList.get(position).getRemain_quantity());

在设置成edittext之前先转换成字符串,然后用同一个字符串对象来获取字符串的长度。

【讨论】:

  • 代码正在运行,但是在这个屏幕上,当我调试这个时应用程序没有响应,而不是在“onTextChanged”内部调试继续无限......请告诉如何解决这个问题?
  • 因此,当我们在文本更改侦听器中更改文本时,我会遇到此链接中讨论的无限循环。 stackoverflow.com/questions/9385081/… 所以只需使用布尔标志来避免无限循环
  • 我已经通过github.com/RedMadRobot/input-mask-android/issues/27这个答案解决了这类问题。
【解决方案2】:

检查这个 oldLaundriesModelArrayList 的大小

if(oldLaundriesModelArrayList.size() > 0 && position <= oldLaundriesModelArrayList.size() ){
    finalHolder.oldLaundriesQuantityEditText.setText(String.valueOf(oldLaundriesModelArrayList.get(position).getRemain_quantity())); 
}

【讨论】:

  • 它不工作并给出 java.lang.StackOverflowError: 异常。
猜你喜欢
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
  • 2018-07-12
  • 2020-05-31
  • 2019-01-25
  • 2015-12-28
相关资源
最近更新 更多