【问题标题】:Inserting Firebase date field on SQLite as String with SimpleDateFormat使用 SimpleDateFormat 将 SQLite 上的 Firebase 日期字段作为字符串插入
【发布时间】:2017-02-05 00:54:05
【问题描述】:

我收到来自 Firebase 的子更改,但是当我插入 SQLite 时,它​​给了我一个警告。 插入成功,但如何解决此警告?

W/ClassMapper: No setter/field for day found on class java.util.Date (fields/setters are case sensitive!)
W/ClassMapper: No setter/field for timezoneOffset found on class java.util.Date (fields/setters are case sensitive!)

Firebase ChildEventListener - 只是给出的部分:

@Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            Log.d(TAG, "item adionado :" + dataSnapshot.getValue(Passageiros.class).toString());
            String retorno = crud.inserirDados(dataSnapshot.getValue(Passageiros.class));
            if(retorno.equals("Registro inserrido")){
                mListaPassageiros.add(dataSnapshot.getValue(Passageiros.class));
            }
        }

这是我认为给出错误的行:

crud.inserirDados(dataSnapshot.getValue(Passageiros.class));

数据库控制器

public String inserirDados(Passageiros passageiro) {
    ContentValues valores;
    long resultado = -10;
    if (carregarDadosByChave(passageiro.getChave()).getCount() <= 0) {
        db = passageirosDAO.getWritableDatabase();
        valores = new ContentValues();
        valores.put(Passageiros.PassageirosEntry.COLUMN_NAME_NOME, passageiro.getNome());
        valores.put(Passageiros.PassageirosEntry.COLUMN_NAME_CHAVE, passageiro.getChave());
        valores.put(Passageiros.PassageirosEntry.COLUMN_NAME_DATA_VALIDADE, sdf.format(passageiro.getData_validade()));

        resultado = db.insert(Passageiros.PassageirosEntry.TABLE_NAME, null, valores);
        db.close();
    }if (resultado == -10){
        return "Dado não inserido";
    }else if (resultado == -1) {
        return "Erro ao inserrir registro";
    } else {
        return "Registro inserrido";
    }
}
public Cursor carregarDadosByChave(String chave) {
    Cursor cursor;
    String[] campos = {Passageiros.PassageirosEntry.COLUMN_NAME_CHAVE, Passageiros.PassageirosEntry.COLUMN_NAME_NOME, Passageiros.PassageirosEntry.COLUMN_NAME_DATA_VALIDADE, Passageiros.PassageirosEntry._ID};
    String where = Passageiros.PassageirosEntry.COLUMN_NAME_CHAVE + " LIKE '" + chave + "'";
    db = passageirosDAO.getReadableDatabase();
    cursor = db.query(Passageiros.PassageirosEntry.TABLE_NAME, campos, where, null, null, null, null, null);

    if (cursor != null) {
        cursor.moveToFirst();
    }
    db.close();
    return cursor;
}

这是一些代码。

Passageiros.java(实体)

public class Passageiros implements Serializable {
public String objectId;
private String nome;
private Date data_validade;
private String chave;
private Boolean ativo;
private Date created;
private Date updated;

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public Date getData_validade() {
    return data_validade;
}

public void setData_validade(Date data_validade) {
    this.data_validade = data_validade;
}

public String getChave() {
    return chave;
}

public void setChave(String chave) {
    this.chave = chave;
}

public Boolean getAtivo() {
    return ativo;
}

public void setAtivo(Boolean ativo) {
    this.ativo = ativo;
}

public Passageiros(String nome, Date data_validade, String chave, Boolean ativo) {
    this.nome = nome;
    this.data_validade = data_validade;
    this.chave = chave;
    this.ativo = ativo;
}
public Passageiros(){

}

@Override
public String toString() {
    return "Passageiros{" +
            "objectId='" + objectId + '\'' +
            ", nome='" + nome + '\'' +
            ", data_validade=" + data_validade +
            ", chave='" + chave + '\'' +
            ", ativo=" + ativo +
            ", created=" + created +
            ", updated=" + updated +
            '}';
}

public static class PassageirosEntry implements BaseColumns{
    public static final String TABLE_NAME = "passageiros";
    public static final String COLUMN_NAME_NOME = "nome";
    public static final String COLUMN_NAME_DATA_VALIDADE = "data_validade";
    public static final String COLUMN_NAME_CHAVE = "chave";
}
}

具有价值观的 Firebase 架构

"-KbeD42PVfdKIoHXuGTV" : {
  "chave" : "-KbeD42PVfdKIoHXuGTV",
  "data_validade" : {
    "date" : 29,
    "day" : 0,
    "hours" : 10,
    "minutes" : 34,
    "month" : 0,
    "seconds" : 36,
    "time" : 1485693276834,
    "timezoneOffset" : 120,
    "year" : 117
  },
  "nome" : "Rogerio4"
}

如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: android firebase firebase-storage


    【解决方案1】:

    您似乎期待这个 Firebase 对象:

    "data_validade" : {
      "date" : 29,
      "day" : 0,
      "hours" : 10,
      "minutes" : 34,
      "month" : 0,
      "seconds" : 36,
      "time" : 1485693276834,
      "timezoneOffset" : 120,
      "year" : 117
    }
    

    映射到该字段:

    private Date data_validade;
    

    警告来自 Date 没有 setDay() 和 setTimezoneOffset() 来匹配对象中的这些字段。确实,这不是在 Firebase 中存储日期的最佳方式。

    如果您想在 Firebase 中存储日期,只需使用长整数即可。如果您随后需要将其转换为日期,只需使用“new Date(long)”创建一个新日期。如果您需要将 Date 转换为 long,请使用 date.getTime()

    【讨论】:

    • 感谢您的帮助。我将代码更改为使用 long,而不是 date
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多