2016-06-03 7 views
3

Android 용 Google Firebase 데이터베이스 SDK v9.0.1을 사용하고 있습니다. 내 애플 리케이션을 파이어베이스에 연결시켜 다양한 위치에서 데이터를 읽고 쓸 수있다.Firebase가 부울 값을 필드에 바인딩하지 않습니다.

그러나 dataSnapshot.getValue(PingReport.class)을 사용하여 바인드 할 특정 부울 필드를 가져올 수 없으며 내 모델에 필드가 분명하게 존재할 때 No setter/field for isUp found on class com.myapp.PingReport이라는 로그에 오류가 계속 발생합니다.

는 여기에서 중포 기지 데이터베이스에서 JSON을이다 :

{ 
    "durationMs": 364, 
    "isUp": true, 
    "timestampMillis": 1464916019971 
} 

을 여기에 모델 클래스의 :

public class PingReport { 

    private long durationMs; 
    private boolean isUp; 
    private long timestampMillis; 

    public PingReport() { 
     // required by Firebase 
    } 

    public PingReport(long durationMs, boolean isUp, long timestampMillis) { 
     this.durationMs = durationMs; 
     this.isUp = isUp; 
     this.timestampMillis = timestampMillis; 
    } 

    public long getDurationMs() { 
     return durationMs; 
    } 

    public boolean isUp() { 
     return isUp; 
    } 

    public long getTimestampMillis() { 
     return timestampMillis; 
    } 
} 

내가 getDurationMs() 또는 getTimestampMillis() 올바른 값을 호출하는 경우가 반환되지만 값은 isUp()에서 반환 항상 false입니다. upisUpmUp이라는 다양한 조합을 시도하고 설정자 setUp(boolean up)setIsUp(boolean isUp)을 추가하려고 시도했지만 아무 것도 작동하지 않는 것 같습니다. 안드로이드 SDK에 대한 문서는 자세하지 않습니다. 내가 간과하고있는 트릭이나 디테일이 있습니까?

+2

게시 한 코드가 무엇이든지간에 문제가 없어야합니다. 나 자신도 아무런 문제없이 비슷한 POJO에서''boolean'을 사용했다. 값이 올바르게 전달되면 코드의 다른 부분을 확인하십시오. –

답변

21

부울 필드의 이름이 isUp 인 경우 getter의 이름은 isIsUp() 또는 getIsUp()이어야합니다. 또는 isUp이라는 게터를 원할 경우 필드 이름은 up이됩니다.

+1

JavaDoc (https://firebase.google.com/docs/reference/android/com/google/firebase/database/DataSnapshot.html) 상태 : "클래스는 속성을 할당 할 공용 getter를 정의해야합니다. 인스턴스가 직렬화 될 때 public getter가 기본값으로 설정됩니다. " getter를 공용 폼에서 public boolean isUp()를 public boolean getIsUp()로 변경하면이 문제가 해결됩니다. 나는 그것을 좋아하지 않는다. 그러나 그것은 해결책이다. – Jschools

+0

현재 문서에서 설명하지 않은 또 다른 옵션은 공용 필드를 사용하는 것입니다. 공개 필드에는 getter 메소드가 필요하지 않습니다. 이 [관련 질문/답변] (http://stackoverflow.com/questions/37512895/are-getter-methods-really-needed-for-class-stored-using-databasereference-setval)을 참조하십시오. –

0

isUp()에 대한 getter가 정상적인 규칙을 따르지 않습니다. public boolean getIsUp()을 사용해 보셨습니까?

0

java의 명명 규칙을 확인해야합니다.

한번에 사용하기 :

private boolean up; 
public boolean isUp() { 
     return up; 
} 
-1

망가 원시 "부울"형식을 사용하는 대신 "부울"클래스를 사용합니다.

관련 문제