Использование метода getSpans для получения всех диапазонов в spannable - PullRequest
0 голосов
/ 19 сентября 2019

Я использую следующий код, чтобы получить все промежутки в охватываемой строке.

SpannableStringBuilder str = new SpannableStringBuilder(editText.getText());
Object [] objectSpans = str.getSpans(0, str.length(), Object.class);

//loop through all spans
for (Object objSpan: objectSpans) {
   Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
   start = spanned.getSpanStart(new Object());
   end = spanned.getSpanEnd(new Object());
   ...
}

Я сталкиваюсь со следующим ClassCastException, когда хочу привести objSpan к Spanned (в строке 6).

java.lang.ClassCastException: android.text.style.SpellCheckSpan не может быть приведен к android.text.Spanned

Как я могу решить эту проблему?Есть ли лучший способ получить все промежутки в строящейся строке?

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Используйте instanceof вместо того, чтобы делать кастинг автоматически.

for (Object objSpan: objectSpans) {
   if(objSpan instanceof Spanned){
    Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
    start = spanned.getSpanStart(new Object());
    end = spanned.getSpanEnd(new Object());
    ...
   } 
}

Чтобы понять, в чем проблема, вы можете прочитать это ClassCastException Documentation, чтобы вы могли прочитать:

Брошено, чтобы указать, что код пыталсяприведение объекта к подклассу, экземпляром которого он не является.Например, следующий код генерирует ClassCastException:

Итак, если вы хотите сделать cast, вы должны убедиться, что объект того же типа, что вы объявляете, в противном случае вы 'получите ClassCastException

0 голосов
/ 19 сентября 2019

проверьте, является ли objSpan экземпляром Spanned. Похоже, @Skizo думает так же, как и мой. Поэтому извините за повторный ответ, но это также решило мою проблему.

SpannableStringBuilder str = new SpannableStringBuilder(editText.getText());
Object [] objectSpans = str.getSpans(0, str.length(), Object.class);

//loop through all spans
for (Object objSpan: objectSpans) {
   if(objSpan instanceof Spanned){
   Spanned spanned = (Spanned) objSpan;// Here I encounter a ClassCastException
   start = spanned.getSpanStart(new Object());
   end = spanned.getSpanEnd(new Object());
   ...
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...