2015-04-21 3 views
0

Я пытаюсь извлечь все вызовы в журнале андроида вызовов, с помощью этого кода:Запрос на журнал Android вызовов пропускает первый запись

ArrayList<Call> list = new ArrayList<Call>(); 
    Cursor cursor; 
    // The fields we want to select from the internal database. Setting this 
    // to null is equivalent to * (e.g., SELECT * FROM...) 
    String[] projection = {CallLog.Calls.NUMBER, CallLog.Calls.DATE, CallLog.Calls.TYPE}; 
    String sortOrder = CallLog.Calls.DATE + " desc"; 
    int numberCol = 0; 
    String contactName; 
    String contactNumber; 
    String contactDate; 
    int callType; 
    Call phone_call; 

    // Query the CallLog table, selecting only the number and date then sorting it by the date. 
    cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, projection, null, null, sortOrder); 

    numberCol = cursor.getColumnIndex(CallLog.Calls.NUMBER); 

    if(cursor.moveToFirst()) { 

     while(cursor.moveToNext()) { 
      //do stuff 
     } 
    } 

    cursor.close(); 

    return list; 

Это работает для большинства вызовов для верхнего, кроме одного (новейший , так как я заказываю по дате, по убыванию).

Как это могло быть?

ответ

3
cursor.moveToFirst() 

будет перемещаться в первый ряд. Все идет нормально. Но тогда вы делаете

while(cursor.moveToNext()) { 
} 

который снова перемещает курсор, на этот раз на следующую строку, которая является второй один, таким образом, пропуская первую строку.

+0

Спасибо! удалил первую строку и теперь работает – user3287740

1

Melquiades верно относится к источнику какой-либо проблемы, однако у вашего решения проблемы. SQLiteDatabase.query позиционируется перед первым элементом, поэтому ваш цикл while работает в данный момент, однако вы не проверяете, есть ли в нем курсор, возвращаемый запросом, какие-либо элементы в нем.

Вот фрагмент, который проверяет пустой курсор и не пропускает первый элемент.

if (cursor.moveToFirst()) { 
    do { 
     // Handle each element of the query 
    } while (cursor.moveToNext()) 

} else { 
    // cursor contains no results 
} 
+0

Пятно на @Derek :) – Melquiades

Смежные вопросы