当我致电devise_for :admins
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
scope :api do
scope :v1 do
devise_for :users, controllers: {
registrations: 'users/registrations',
confirmations: 'users/confirmations',
sessions: 'users/sessions',
passwords: 'users/passwords'
}
get 'confirm_user_email', to: 'user_emails#confirm_email', as: :confirm_user_email
get 'forgot_password', to: 'landing_page#forgot_password'
post 'send_invitation', to: 'users#send_invitation', as: :send_invitation
end
end
unless Rails.env.production?
mount LetterOpenerWeb::Engine, at: '/letter_opener'
end
require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'
get "*path" => "home#index"
mount ActionCable.server => '/cable'
EditText.setSelection()
N可以是任何数字。例如,如果我呼叫java.lang.IndexOutOfBoundsException: setSpan (N ... N) ends beyond length 10500
N将是10568.但setSelection(10476,10568)
是常数。
10500
java.lang.IndexOutOfBoundsException: setSpan (10568 ... 10568) ends beyond length 10500
at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1090)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:665)
at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:658)
at android.text.Selection.setSelection(Selection.java:78)
at android.widget.EditText.setSelection(EditText.java:91)
...
是否存在导致此问题的限制?
在我做选择之前,我加载一个文本文件,其中包含肯定超过10500个字符,因为它包含ca. 12000行。然后我调用EditText
将文件内容放入字段中。 EditText.setText()
没有任何问题。
首先我认为文件内容有问题,但我加载了另一个文件,当选择发生时,我得到了相同的异常,它包含EditText.setText()
答案 0 :(得分:2)
这是代码失败的android.text.SpannableStringBuilder
的实际方法。
private void checkRange(final String operation, int start, int end) {
if (end < start) {
throw new IndexOutOfBoundsException(operation + " " +
region(start, end) + " has end before start");
}
int len = length();
if (start > len || end > len) {
throw new IndexOutOfBoundsException(operation + " " +
region(start, end) + " ends beyond length " + len);
}
if (start < 0 || end < 0) {
throw new IndexOutOfBoundsException(operation + " " +
region(start, end) + " starts before 0");
}
}
看起来你的开始/结束大于EditText中的长度(由length()
计算)。可能是截断的情况。
EditText可以容纳的字符数不受Android操作系统的限制,但可能来自设备。请参阅Max 9000 characters in Android TextView?以及https://groups.google.com/forum/#!topic/android-developers/JVAm8vBaIQg
答案 1 :(得分:1)
使用AutoCompleteTextView时出现这样的问题。问题是自动完成窗口会延迟打开。如果在此延迟期间删除了文本,那么当您尝试打开窗口时,弹出窗口将尝试使用已删除的文本。避免这种情况的唯一方法是取消打开此窗口。这可以通过从该视图的Handler中删除所有操作来完成。
autoCompleteTextView.getHandler().removeCallbacksAndMessages(null);