[英]Saving dates to sqlite database with Active Android
我有一個簡單的類Event,它使用活動的android保存到SQlite數據庫中,如下所示:
Event.java
@Table(name = "events", id = "_id")
public class Event extends Model {
@Column (name = "EventLocation")
private String mEventLocation;
@Column (name = "EventDate")
private String mEventDate;
}
AddEventActivity.java:
mSubmitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String eventLocation = mEventLocation.getText().toString();
String eventDate = mEventDate.getText().toString();
Event event = new Event(eventLocation,eventDate);
event.save();
目前,我正在將日期以及開始/結束時間另存為字符串。 但是我在我的應用程序中添加了一個新功能,我想將當前日期/時間與對象ArrayList的日期進行比較,然后返回將在當天晚些時候發生的下一個Event或其他事件。
最有效的方法是什么? 我需要能夠使用Comparable或Comparator按日期對事件的ArrayList進行排序,然后將它們與當前日期進行比較,因此我嘗試將字符串解析為Date對象並使用SimpleDateFormatter,但是由於它們是Strings,因此不會確實有效。 如何使用Active Android將日期保存到SQLite? 我發現的所有保存示例都是字符串。
我是Java / Android的新手。 非常感謝。
1)對列表進行排序
使您的Event
類實現Comparable
。 然后在compareTo()
方法中,使用Date
進行比較。
確保 Event
類中的dateTime類型為Date
。
public class Event extends Model implements Comparable{
...
@Override
public int compareTo(MyObject o) {
return getDateTime().compareTo(o.getDateTime());
}
}
或者,如果您不想更改模型,則可以動態創建比較器
Collections.sort(myList, new Comparator<Event>() {
public int compare(Event o1, Event o2) {
if (o1.getDateTime() == null || o2.getDateTime() == null)
return 0;
return o1.getDateTime().compareTo(o2.getDateTime());
}
});
2)將日期存儲到ActiveAndroid
ActiveAndroid支持自動序列化日期字段。 它以毫秒為單位在內部存儲為時間戳記(INTEGER)。
@Column(name = "timestamp", index = true)
private Date timestamp;
//and the date will be serialized to SQLite. You can parse strings into a Date object using SimpleDateFormat:
public void setDateFromString(String date) throws ParseException {
SimpleDateFormat sf = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZZ yyyy");
sf.setLenient(true);
this.timestamp = sf.parse(date);
}
或者,您可以創建一個Util方法將String
轉換為Date
,並返回Date
:
public Date getDateFromString(String selectedDate) throws ParseException{
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(selectedDate);
return date;
}
3)將日期與事件對象列表進行比較。
然后最后調用該函數以查找比列表中指定日期晚的日期
public static List<Event> findRecent(Date newerThan) {
return new Select().from(Event.class).where("timestamp > ?", newerThan.getTimeInMillis()).execute();
}
希望能幫助到你!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.