2013-09-04 3 views
2

RawRowMapper를 사용하여 ormlite에서 관련 열을로드하고 있습니다. RawRowMapper는 모든 데이터를 String으로 반환합니다.Ormlite RawRowMapper 잘린 double

관찰 결과 double 값이 잘립니다.

예 : 데이터가 삽입 - 데이터를 저장하는 데 사용> 57.1117146374

데이터 유형 -> 직접 조회 Ormlite에서 더블

데이터 -> 57.1117146374 (이것은 올 본질적 ormlite 것을 의미 > 57.1117 (잘린 데이터가

어떤 생각 문자열 [] resultColumns의 일환으로 오는 어떻게 아보 할 - 실제로

데이터 매퍼를 사용하는 경우 Ormlite에서 올바르게 데이터)를 저장 이드는 잘 렸어?

편집 :

@DatabaseField(columnName = "LAT") 
private Double lat; 

개체 필드 :

private double lat; 

열쇠는 여기에 resultcolumns의 문자열 [], 내가 얻을 이미 잘립니다 것입니다. Ormlite에서

+0

감사합니다. 회색. 빨리되었습니다. 관련 정보를 편집하고 추가했습니다. – PravinCG

+0

dao가 데이터를 지능적으로 가져올 수 있도록 데이터 유형을 전달하는 패치 또는 방법이 필요할 수 있으므로 지금은 좋지 않습니다. – PravinCG

+0

감사합니다 손가락을 지키십시오. 또한 당신의 발견을 알려주고, 나는 또한 그 근원을 파헤 칠 것입니다. – PravinCG

답변

4

데이터 매퍼를 사용하여 -> 57.1117은 (잘린 데이터는 문자열 [] resultColumns의 일환으로 오는이

문제는 Stringdouble 값을 받고하는 것은 안드로이드에 의해 잘립니다 될 것으로 보인다 결과는 동일한 열 인덱스에 cursor.getDouble(columnIndex);를 사용하여 추출하면되지만, 전체 정밀도를 유지하는 이유 cursor.getString(...) 방법. 확실하지.

내가 믿는 여기에 해결책은 당신이 dao.queryRaw(String, DataType[], ...) method를 사용하는 경우. 다른 행을 매핑하는 것이다

이중 필드가 적절하게 추출 된 것 같습니다. 내 테스트 수업의 샘플은 다음과 같습니다.

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

는 또한 사용자 정의 행 매퍼를 사용할 수 있고 dao.queryRaw(String, RawRowMapper, ...) method는 변환하여 double 필드 사용자 정의 개체를 반환 할 수 있습니다.

+0

내가 다시 시도하고 돌아 가자. – PravinCG

+0

새 DataType [] {DataType.DOUBLE}을 사용하면 내가 선택한 각 열에 대해 다른 데이터 형식을 전달할 수 있으며 동일한 형식으로 매퍼의 데이터를 반환합니까? – PravinCG

+1

예, 작동 방식입니다. 값의 유형이 잘못된 경우 결과가 무엇인지 확신 할 수 없습니다. 예를 들어 문자열이 "foo"이고 double에 매핑하려고하면 @PravinCG가 실패 할 것이라고 가정합니다. – Gray