Pergunta sobre database, contacts, android – limitando o número de linhas em uma função ContentResolver.query ()

30

Existe uma maneira de limitar o número de linhas retornadas a um cursor? Eu tenho um telefone com cerca de 4000 contatos, eu só preciso de alguns deles.

este é o código que estou usando

<code>        db = new dBHelper(this);
        ContentResolver cr = getContentResolver();
        Cursor cursor;

        cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " ASC");
        Log.i(TAG, CLASSNAME + " got contacts entries");
        for (int it = 0; it <100 ; it++){//cursor.getCount()
            Log.i(TAG, CLASSNAME + " getting string");
            String mytimes_contacted = cursor.getString(cursor.getColumnIndex(dBHelper.times_contacted)); 
            Log.i(TAG, CLASSNAME + " done from the string");
        }
</code>

o log que estou recebendo é

<code>I/Check(11506): [ContactsPicker] got contacts entries
I/Check(11506): [ContactsPicker] getting first string
D/AndroidRuntime(11506): Shutting down VM
W/dalvikvm(11506): threadid=1: thread exiting with uncaught exception (group=0x2aac8578)
D/dalvikvm(11541): GC_CONCURRENT freed 923K, 46% free 4000K/7303K, external 1685K/2133K, paused 1ms+8ms
E/AndroidRuntime(11506): FATAL EXCEPTION: main
E/AndroidRuntime(11506): java.lang.RuntimeException: Unable to start activity ComponentInfo{~~my package name~~}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 3537
</code>

Sua resposta

1   a resposta
36

Para limitar o número de resultados no seu cursor, tente:

<code>cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " LIMIT 100");
while(cursor.moveToNext()) {
    // something clever
}
</code>
Concordo com o CommonsWare, esta é uma solução hacker. Em muitas situações você pode usar umseleção para minimizar os resultados retornados. Experimente isso primeiro Georgios Pligoropoulos
Isso funciona para o provedor de SMScontent://sms/inbox também. v.ladynev
Esta solução é válida apenas se você precisar de 4000 (ContactNameordenar por nome asc), se vc precisa primeiro 4000 (ordem inserida), então não vai funcionar porque ele vai dar os dados classificados com base em ContactName Vishal Pandey
Atualizado com um exemplo de limite, mas está limitado aos primeiros 100 resultados. A verdadeira questão écomo você quer limitar o cursor? Apenas pessoas com o nome "Bob"? Sam

Perguntas relacionadas