我无法理解问题所在,看看我的代码。
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());
返回String的方法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的Inner静态类,我在其中设置了Date的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()中有这一行显示列表中的日期
holder.txtDate.setText("Data: " + arrayList.get(position).getDataa());
我已经好几次了解问题,但遗憾的是没有办法。 通过System.out.println()在Logcat中创建Note时,我正确地看到了日期。 但我的印象是日期不会保存在DB 中,事实上在列表(Adapter)中,日期全部初始化为1 / gen / 1970.
答案 0 :(得分:1)
根据此链接Datatypes in SQLLite
SQLite没有为存储日期留出的存储类 和/或时间。相反,SQLite的内置日期和时间函数 能够将日期和时间存储为TEXT,REAL或INTEGER 值:
因此,存储日期的一种方法是使用INTEGER作为列类型。然后使用date.getTime()将纪元时间(即纪元时间作为long类型,以毫秒为单位)作为要存储的值。
从数据库读取时,使用date.setTime(long)设置日期变量。