Android,日期未保存在数据库中

最后发布: 2015-04-08 22:27:50


问题

我不明白是什么问题,请看一下我的代码。

Note的构造方法,接受对象类型Date:

public Nota(String titolo, String testo, Date data, int colore) {
    this.titolo = titolo;
    this.testo = testo;
    this.data = data;
    // controlla che l'id del radiobutton non sia -1
    if( colore == -1 ){
        Log.w("Color", "Errore id Colore del Radio Button");
    }else{
        this.colore = colore;
    }
}

如果将注释保存在数据库中,则在此处传递日期:

private void insertInDB() {
    DateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.ITALY);
    Calendar now = Calendar.getInstance(Locale.ITALY);
    Date date = now.getTime();
    String dteStr = rifDate.getText().toString();
    // provo a parsare una String in Date
    try{
        date = format.parse(rifDate.getText().toString());
        // cattura l'eccezione
    }catch (ParseException pe){
        pe.printStackTrace();
    }
    nota = new Nota(rifTitleNote.getText().toString(),    rifWriteEdit.getText().toString(), date,    idRadioGroup);
    now.setTime(date);
    // if the insertion is successful ok, otherwise return -1
    boolean insNoteCheck = dbNote.insertNote(nota);
}

这是在数据库类中插入的方法,该方法扩展了SQLiteOnHelper:

public boolean insertNote(Nota nota){
    // boolean inizializzat a false utilizzata come return
    boolean resultInsert = false;
    // repository dei dati in modalità scrittura
    SQLiteDatabase dbLite = this.getWritableDatabase();

    // utilizza un ContentValues come mappa di valori, dove le columns rappresentano le chiavi
    ContentValues values = new ContentValues();
    values.put("titoloNota", nota.getTitolo());
    values.put("testoNota", nota.getTesto());
    values.put("dataNota", nota.getData()); // getData() return a String
    values.put("coloreNota", nota.getColore());

方法getData()返回字符串:

public String getData() {
    SimpleDateFormat formatter = new SimpleDateFormat("dd/M/yyyy", Locale.ITALY);
    return DateFormat.getDateInstance().format(data); // data is Data type passed to the Constructor
}

然后,我为DatePickerDialog创建了一个内部静态类,在其中设置了日期的EditText,这里是onDateSet()方法:

public void onDateSet(android.widget.DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        EditText date = (EditText) getActivity().findViewById(R.id.editData);
        //System.out.println("QUESTA DATAA   :"+ anno + " " + mese + " " + giorno);
        // setto il testo della Data aggiungendo +1 al mese poichè in Calendar sono rappresentati(0-11)
        date.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
    }

最后,在onBindViewHolder()方法中,我有一个用于元素列表的Adapter,该行用于在列表中显示日期

holder.txtDate.setText("Data: " + arrayList.get(position).getDataa());

我已经做过几次了解什么问题了,但不幸的是没有办法。 通过在Logcat中创建Note时通过System.out.println(),我可以正确看到日期。 但是我有个印象, 日期不会保存在DB中 ,实际上是在列表(适配器)中,日期都初始化为1 / gen / 1970。

java android date save
回答

按照此链接,SQLLite中的数据类型

SQLite没有为存储日期和/或时间预留存储类。 相反,SQLite内置的日期和时间功能可以将日期和时间存储为TEXT,REAL或INTEGER值:

因此,存储日期的一种方法是使用INTEGER作为列类型。 然后使用date.getTime()获取纪元时间(即,以毫秒为单位的长类型的纪元时间)作为要存储的值。

从数据库中读取时,请使用date.setTime(long)设置日期变量。