2013-03-18 27 views
6

Tôi đang truy vấn bảng sự kiện trong android để nhận sự kiện.Cách truy vấn các sự kiện lịch trên Android cho phạm vi ngày cụ thể?

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); 

Điều này trả về tất cả các sự kiện. Nhưng bây giờ tôi muốn các sự kiện chỉ trong khoảng thời gian cụ thể nói từ 4/03/2013 đến 7/03/2013. Làm cách nào để sử dụng selectionselectionArgs[]? Tôi đã thử điều này

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

Nhưng không trả lại bất kỳ thứ gì. Sự nghi ngờ của tôi là 1. Điều khoản sẽ hoạt động ở đâu? Bởi vì, startDate và endDate đầu tiên được chuyển đổi thành dài (mili giây) và sau đó thành String và sau đó được lưu trữ trong bảng. Vậy làm thế nào các chuỗi có thể được so sánh với các giá trị dài của chúng. Không có hàm toNumber() trong sqlite. 2. Nếu tôi đi qua selectionArgs thì startStringendString phải ở định dạng nào?

+0

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

Trả lời

7

startString & endString phải được chuyển thành mili giây. Thử sử dụng:

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) 

Ngoài ra, tôi nghĩ logic của bạn bị đảo ngược, phạm vi ngày nên như thế này:

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

Bạn có thể giải thích câu trả lời này ... – Deepak

+0

Đây là giải pháp! –

Các vấn đề liên quan