Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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 Ormlite RawRowMapper截断双精度_Android_Database_Ormlite - Fatal编程技术网

Android Ormlite RawRowMapper截断双精度

Android Ormlite RawRowMapper截断双精度,android,database,ormlite,Android,Database,Ormlite,我正在使用RawRowMapper从ormlite加载相关列。RawRowMapper以字符串形式返回所有数据 观察结果是它截断了双精度值 例如: 插入数据->57.1117146374 用于存储数据的数据类型->双精度 直接查询时来自Ormlite的数据:->57.1117146374(这是正确的,本质上意味着Ormlite实际上正确地存储了数据) 使用mapper->57.1117时来自Ormlite的数据(截断的数据作为字符串[]resultColumns的一部分 知道如何避免它被截断吗

我正在使用RawRowMapper从ormlite加载相关列。RawRowMapper以字符串形式返回所有数据

观察结果是它截断了双精度值

例如: 插入数据->57.1117146374

用于存储数据的数据类型->双精度

直接查询时来自Ormlite的数据:->57.1117146374(这是正确的,本质上意味着Ormlite实际上正确地存储了数据)

使用mapper->57.1117时来自Ormlite的数据(截断的数据作为字符串[]resultColumns的一部分

知道如何避免它被截断吗

编辑:

对象字段:

private double lat;
这里的关键是我得到的resultcolumns[]中的字符串已经被截断

使用mapper->57.1117时来自Ormlite的数据(截断的数据作为字符串[]resultColumns的一部分

问题似乎是将
double
值作为
String
输出会被Android的
cursor.getString(…)
方法截断。不确定原因,但如果在同一列索引上使用
cursor.getDouble(columnIndex);
提取结果,则会保留完整的精度

我认为这里的解决方案是以不同的方式映射行。如果使用,双字段似乎被适当地提取出来。这是我的测试类中的一个示例

GenericRawResults<Object[]> results =
        dao.queryRaw(dao.queryBuilder().selectColumns("lat")
            .prepareStatementString(), new DataType[] { DataType.DOUBLE });
CloseableIterator<Object[]> iterator = results.closeableIterator();
try {
    assertTrue(iterator.hasNext());
    Object[] objs = iterator.next();
    assertEquals(foo.doubleField, objs[0]);
} finally {
    iterator.close();
}
GenericRawResults=
dao.queryRaw(dao.queryBuilder().selectColumns(“lat”)
.prepareStatementString(),新数据类型[]{DataType.DOUBLE});
CloseableIterator迭代器=结果。CloseableIterator();
试一试{
assertTrue(iterator.hasNext());
Object[]objs=iterator.next();
assertEquals(foo.doubleField,objs[0]);
}最后{
iterator.close();
}
您还可以使用自定义行映射器和来转换并返回带有
double
字段的自定义对象

使用mapper->57.1117时来自Ormlite的数据(截断的数据作为字符串[]resultColumns的一部分

问题似乎是将
double
值作为
String
输出会被Android的
cursor.getString(…)
方法截断。不确定原因,但如果在同一列索引上使用
cursor.getDouble(columnIndex);
提取结果,则会保留完整的精度

我认为这里的解决方案是以不同的方式映射行。如果使用,双字段似乎被适当地提取出来。这是我的测试类中的一个示例

GenericRawResults<Object[]> results =
        dao.queryRaw(dao.queryBuilder().selectColumns("lat")
            .prepareStatementString(), new DataType[] { DataType.DOUBLE });
CloseableIterator<Object[]> iterator = results.closeableIterator();
try {
    assertTrue(iterator.hasNext());
    Object[] objs = iterator.next();
    assertEquals(foo.doubleField, objs[0]);
} finally {
    iterator.close();
}
GenericRawResults=
dao.queryRaw(dao.queryBuilder().selectColumns(“lat”)
.prepareStatementString(),新数据类型[]{DataType.DOUBLE});
CloseableIterator迭代器=结果。CloseableIterator();
试一试{
assertTrue(iterator.hasNext());
Object[]objs=iterator.next();
assertEquals(foo.doubleField,objs[0]);
}最后{
iterator.close();
}


您还可以使用自定义行映射器和来转换并返回带有
字段的自定义对象。

谢谢Gray。这很快。我编辑并添加了相关信息。我现在感觉不太好,可能需要一个补丁或一种方法来传递数据类型,以便dao智能地获取数据。谢谢it’s crossed.也让我知道你的发现,我也会深入了解源代码。嗨,格雷,想知道这方面是否有任何更新?谢谢格雷。这很快。我编辑并添加了相关信息。我现在感觉不好,可能需要一个补丁或一种方法来传递数据类型,以便dao智能地获取数据。谢谢keepin祝你好运。同时让我知道你的发现,我也会深入了解源代码。嗨,格雷,想知道这方面是否有任何更新?让我试试回来。使用新的数据类型[]{DataType.DOUBLE}我可以为我选择的每一列传递不同的数据类型吗?它会以相同的格式返回映射器中的数据吗?是的,它就是这样工作的。如果值的类型错误,我不确定结果是什么。例如,如果它是字符串“foo”如果您尝试将其映射到double,我假设它将失败@PravinCG。我已使用迭代器方法逐个迭代和创建对象。但我无法使用customRowMapper进行此操作。任何指针都会有所帮助。我在此处添加了一些测试,可以用作示例:让我尝试返回。使用新数据类型[]{DataType.DOUBLE}我可以为我正在选择的每个列传递不同的数据类型吗?这会以相同的格式返回映射器中的数据吗?是的,这就是它的工作方式。如果值的类型错误,我不确定结果是什么。例如,如果它是字符串“foo”如果您尝试将其映射到double,我假设它将失败@PravinCG。我已使用迭代器方法逐一迭代和创建对象。但我无法使用customRowMapper进行此操作。任何指针都会很有帮助。我在此处添加了更多测试,可以用作示例: