Android greenDAO:保存的双精度实体值为0
我正在数据库中插入一个Android greenDAO:保存的双精度实体值为0,android,greendao,Android,Greendao,我正在数据库中插入一个列表。此实体有一个Double字段。 这个列表有49个元素,但是,当我从数据库加载它时,在+-80%的元素中,double的值是0 实体类: public class NumeroStats implements IStats { private Long id; private Integer numero; private Integer sorties; private java.util.Date derniereSortie;
列表
。此实体有一个Double
字段。
这个列表有49个元素,但是,当我从数据库加载它时,在+-80%的元素中,double的值是0
实体类:
public class NumeroStats implements IStats {
private Long id;
private Integer numero;
private Integer sorties;
private java.util.Date derniereSortie;
private Double percentage;
//Ommited gets & sets
}
插入代码:
for (NumeroStats ns : stats.getNumerosStats()) {
ns.setPercentage((ns.getSorties() * 1.0 / drawCount) * 100);
Log.d(TAG, "Pre Insert NumeroStats: " + ns.getNumero() + " % " + ns.getPercentage());
long id = nsDao.insert(ns);
NumeroStats asd = nsDao.load(id);
Log.d(TAG, "Inserted NumeroStats: " + asd.getNumero() + " % " + asd.getPercentage());
}
drawCount=844
,并且始终>0
在插入实体之前,所有值都是正确的。
插入每个NumberStats
并从其id加载后,值是正确的
但是,当我将它们装入一个片段时,大部分项目的百分比为percentage=0
NumeroStatsDao nsDao = mDaoSession.getNumeroStatsDao();
List<NumeroStats> nsList = new ArrayList<NumeroStats>();
for(int i = 0 ; i <50 ; i++){
nsList.add(new NumeroStats(null, i+1, i*3,new Date(), new Random().nextDouble()*100));
}
nsDao.insertInTx(nsList);
加载代码片段:
NumeroStatsDao nsDao = mDaoSession.getNumeroStatsDao();
List<NumeroStats> nStatsList = nsDao.queryBuilder().where(NumeroStatsDao.Properties.Numero.notEq(0)).list();
编辑:如果我将百分比设置为1.0,同样的情况也会发生
ns.setPercentage(1.0);
EDIT2:按下面的代码插入实体,所有百分比都与随机值一起存储,并且始终!=0
NumeroStatsDao nsDao = mDaoSession.getNumeroStatsDao();
List<NumeroStats> nsList = new ArrayList<NumeroStats>();
for(int i = 0 ; i <50 ; i++){
nsList.add(new NumeroStats(null, i+1, i*3,new Date(), new Random().nextDouble()*100));
}
nsDao.insertInTx(nsList);
编辑3:
我已经找到了问题的原因,但我找不到任何合理的解释来解释为什么会发生这种情况。
在我插入NumberStats
列表之前,我插入一个NumberStats
,其中numero=0
和sorties=844
,即支取计数值。(我知道,这样做很糟糕)
像这样:
NumeroStats nsDrawCount = new NumeroStats();
nsDrawCount.setNumero(0);
nsDrawCount.setSorties(drawCount);
nsDao.insert(nsDrawCount);
for (NumeroStats ns : nsList) {
ns.setPercentage((ns.getSorties() * 1.0 / drawCount) * 100);
nsDao.insert(ns);
}
如果不插入nsDrawCount
,则循环中插入的值是正确的。
我尝试了初始化,并在循环插入后插入nsDrawCount
,之后架次值也存储为0
这很奇怪,不是吗?是什么让它这样做的
NumeroStats nsDrawCount = new NumeroStats();
nsDrawCount.setNumero(0);
nsDrawCount.setSorties(drawCount);
nsDao.insert(nsDrawCount);
for (NumeroStats ns : nsList) {
ns.setPercentage((ns.getSorties() * 1.0 / drawCount) * 100);
nsDao.insert(ns);
}