2011-11-07 15 views
5

Ho un fornitore di contenuti che accede mio database che va bene se avete bisogno di trattare con record, ma ho bisogno di un metodo per restituire un numero intero che indica il numero di record in una tabellaMetodo personalizzato Android nel provider di contenuti per ottenere il numero di record nella tabella?

Il metodo è simile al seguente

Ma non riesco a trovare alcun modo di utilizzare questo (o qualsiasi altro metodo che non restituisce un cursore per quella materia) in un provider di contenuti, quindi dove è il posto migliore per mettere questo metodo e come chiamarlo ?

Ovviamente avrei potuto fare la vera brutta possibilità di selezionare tutti i record con una query gestito e utilizzando il risultato cursor.count ma questo è un modo estremamente inefficiente di affrontare questo requisito specifico

Grazie

risposta

10

Si può anche semplicemente usare "count (*)" come proiezione in una chiamata ai vostri fornitori di contenuti URI, come nel seguente metodo di supporto

public static int count(Uri uri,String selection,String[] selectionArgs) { 
    Cursor cursor = getContentResolver().query(uri,new String[] {"count(*)"}, 
     selection, selectionArgs, null); 
    if (cursor.getCount() == 0) { 
    cursor.close(); 
    return 0; 
    } else { 
    cursor.moveToFirst(); 
    int result = cursor.getInt(0); 
    cursor.close(); 
    return result; 
    } 
} 
1

Un modo per accedervi è utilizzare il metodo call() nella classe ContentResolver. Non riesco a trovare molto su come usarlo effettivamente su google, ma la mia ipotesi è che dovresti semplicemente avere il tuo getRecordCount() restituire un pacchetto con il tuo risultato. Naturalmente la cosa più semplice da fare sarebbe qualcosa di simile a ciò che è descritto in questo SO Post.

+0

Grazie, questo apre una serie di altre questioni a cui sarebbe meglio rispondere se vi fosse un esempio di come implementare la soluzione suggerita. In particolare come ottenere il valore dal pacchetto restituito e come inserire il valore nel risultato della classe bundle. Se potessi indicarmi la direzione di un esempio di utilizzo di questo metodo, lo apprezzerei molto. – jamesc

+0

Sto riscontrando problemi nel trovare esattamente come utilizzare il metodo. Vedi la mia risposta modificata per altri suggerimenti. –

+0

lol! Non per conto mio :) - Immagino di poter usare una query gestita, impostare un nuovo uri e avere il risultato del conteggio selezionato * restituire un cursore - Sembra la soluzione Simples. Grazie per il vostro aiuto – jamesc

Problemi correlati