2014-10-18 62 views
0

在某些Android设备我得到了我所使用的输入开始,以消除任何零的输入过滤器内抛出IndexOutOfBoundsException:IndexOutOfBoundsException异常里面输入过滤

mycode的:

zeroFilter = new InputFilter() 
    { 
     @Override 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) 
     { 
      if(dest.length() == 0) 
      { 
       if (source.charAt(0) == '0') 
       { 
        return ""; 
       } 
      } 
       return null; 
     } 
    }; 

    etxtNumbers.setFilters(new InputFilter[]{zeroFilter, new InputFilter.LengthFilter(5)}); 

堆栈跟踪:

java.lang.IndexOutOfBoundsException: charAt: 0 >= length 0 
at android.text.SpannableStringBuilder.charAt(SpannableStringBuilder.java:111) 
at com.nasseralsalmi.wheel.AddPrivatePlateActivity$1.filter(AddPrivatePlateActivity.java:57) 
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:428) 
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:420) 
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:29) 
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:667) 
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:425) 
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:333) 
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:77) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4511) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747) 
at dalvik.system.NativeStart.main(Native Method) 
+0

也许'source'为空? – Seelenvirtuose 2014-10-18 16:00:38

回答

1

在访问其中的任何字符之前,您必须检查该来源是否为空。

if (source.length() > 0 && source.charAt(0) == '0') 
{ 
    return ""; 
} 
+0

这是一个很好的习惯 – 2014-10-18 16:48:20