Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android greenDAO:保存的双精度实体值为0_Android_Greendao - Fatal编程技术网

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);
}