簡體   English   中英

使用Active Android將日期保存到sqlite數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM