2013-03-18 10 views
6

Sto interrogando la tabella degli eventi in Android per ottenere eventi.Come eseguire query sugli eventi di calendario Android per un intervallo di date specifico?

String[] projection = new String[] { "calendar_id", "title", "description", 
        "dtstart", "dtend", "eventLocation" }; 

Cursor cursor = cr.query(Uri.parse("content://com.android.calendar/events"), 
        projection, 
        null, 
        null, 
        null); 

Restituisce tutti gli eventi. Ma ora voglio eventi solo in una durata specifica del 4/03/2013 al 7/03/2013. Come utilizzare selection e selectionArgs[]? Ho provato questo

String selection = "((dtstart <= ?) AND (dtend >= ?))"; 
String[] selectionArgs = new String[] {startString, endString}; 

Ma la sua non tornare nulla. I miei dubbi sono 1. La clausola dove funziona? Perché startDate e endDate vengono prima convertiti in long (millisecondi) e quindi in String e quindi vengono memorizzati nella tabella. Quindi, come possono essere confrontate le stringhe per i loro lunghi valori. Non esiste la funzione toNumber() in sqlite. 2. Se sto passando selectionArgs allora startString e endString dovrebbe essere in quale formato?

+0

controllo: http://stackoverflow.com/questions/26844770/how-to- get-access-to-the-calendars-on-a-android-phone –

risposta

7

startString & endString devono essere passati in millis. Prova con:

Calendar c_start= Calendar.getInstance(); 
c_start.set(2013,2,4,0,0); //Note that months start from 0 (January) 
Calendar c_end= Calendar.getInstance(); 
c_end.set(2013,2,7,0,0); //Note that months start from 0 (January) 

Inoltre, penso che la logica è invertita, intervallo di date dovrebbe essere come questo:

String selection = "((dtstart >= "+c_start.getTimeInMillis()+") AND (dtend <= "+c_end.getTimeInMillis()+"))"; 
+0

Potresti elaborare questa risposta ... – Deepak

+0

Questa è la soluzione! –

Problemi correlati