Комментарий сначала. Вопрос заключался в том, чтобы не использовать try/catch
. Если вы не против использовать его, прочитайте ответ ниже. Здесь мы просто проверяем строку JSON
, используя regexp, и она будет работать в большинстве случаев не во всех случаях.
Посмотрите вокруг линии 450 в https: / /github.com/douglascrockford/JSON-js/blob/master/json2.js
Существует регулярное выражение, которое проверяет правильность JSON, например:
if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
//the json is ok
}else{
//the json is not ok
}
EDIT: новая версия json2.js делает более сложный синтаксический разбор, чем предыдущий, но все же основывается на замене регулярного выражения (из комментария @Mrchief )
Это вызвано установкой android:ellipsize="middle"
(или start
) на TextView
, которая не имеет android:singleLine="true"
.
Например, следующие сбои в этой ошибке:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:maxLines="1"
android:text="blahblahblahblahblahblahblahblahblahbla---go really long" />
Но следующее:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:text="blahblahblahblahblahblahblahblahblahbla---go really long" />
Ссылка: https://code.google.com/p/android/issues/detail?id=33868
Примечание: singleLine
является устаревшим атрибутом, но все еще работает с Jelly Bean.
Это определенно связано с логикой эллипсиса текстового представления, оно не имеет ничего общего с кодом адаптера.
Проверьте размеры макетов и длины столбцов столбца столбца в конструкторе CursorAdapter . Когда несоответствие длины двух массивов, это вызывает ArrayOutOfBoundsException
.
ваша проблема находится в методе getView, этот метод будет вызываться всякий раз, когда u прокручивает ваш массив, поэтому убедитесь, что вы проверяете, не является ли представление не нулевым, чем делать какую-либо логику.