Вы получаете курсор и переходите к первой строке, добавляете данные в массив, затем перемещаетесь к первой строке и добавляете данные НАВСЕГДА (если запросом извлечена 1 или более строк).
Вы должны использовать moveToNext , а не moveToFirst (который будет первоначально перемещаться в первую строку, так как курсор изначально расположен на перед первой строкой (позиция -1) ) Например: -
while (result.moveToNext()){
source.add(result.getString(result.getColumnIndex(COL_JUDUL)));// line 97
}
result.close(); //<<<<<<<<<< SHOULD ALWAYS CLOSE CURSORS WHEN DONE WITH THEM
return source;