2013-08-20 1 views
4

lists, 당신은 자바 객체를 생성하고이 같은 setValue() 통해 중포 기지 기준에 해당 객체를 쓰기 예제가있다 : 당신이 작성하지 않은 내부적으로이 작품을, 즉 않는 방법Firebase의 setValue()는 Java 오브젝트에 어떻게 작동합니까? 중포 기지의 문서에서

private static class MyObject { 

    private String property1; 
    private int property2; 

    public MyObject(String value1, int value2) { 
     this.property1 = value1; 
     this.property2 = value2; 
    } 

    public String getFirstProperty() { 
     return property1; 
    } 

} 

private void populateList() { 
    Firebase ref = new Firebase("https://MyDemo.firebaseIO-demo.com/myObjects"); 
    ref.push().setValue(new MyObject("myString", "7")); 
} 

toString() 메소드 등 어떤 값이 Firebase 참조에 정확하게 저장됩니까? 그리고 한 걸음 더 나아가 Firebase 클라이언트는 저장된 값에서 이전 오브젝트를 복원 할 수 있습니까? 방법?

Firebase가 필드를 읽을 수 있도록 private static 클래스가 있어야합니까?

답변

5

문서는 how this works 설명 :

지정된 값이 위치에서 데이터를 설정합니다. 값이 방법에 의해 허용 네이티브 형식은 JSON 유형에 해당합니다 또한

  • Boolean
  • Long
  • Double
  • Map<String, Object>
  • List<Object>

, 당신이 할 수있는 자신의 클래스의 인스턴스를이 loc에 설정

  1. 클래스는 속성이 할당 될 공공 게터를 정의해야합니다 인수
  2. 클래스를 필요없는 기본 생성자가 있어야합니다 ATION, 그들은 다음과 같은 제약 조건을 만족 제공. 인스턴스가 그래서

를 직렬화 할 때 공공 게터없는 속성은 당신이 저장하고자하는 모든 속성에 대한 게터를 작성해야합니다, 기본 값으로 설정됩니다. 귀하의 예제에서는 firstProperty 속성이 작성되지만 기본 생성자를 정의하지 않았으므로 다시 읽을 수는 없습니다.

+0

고맙습니다. 그래서 이것은 리플렉션을 아마 사용합니다, 맞습니까? 아마도 getter가 필요한 이유를 알고 있습니까? setter가 없으므로 필드에 액세스 할 때 리플렉션을 사용해야하므로 getter없이 값을 직접 가져 오지 않는 이유는 무엇입니까? 그렇지 않다면 어쨌든 이것을 받아 들여야하므로 아무런 문제가 없습니다. – caw

+0

JavaBeans 속성은 일반적으로 [Introspection]을 사용합니다 (http://docs.oracle.com/javase/7/docs/api/java/beans /Introspector.html), 그래, 그 장면의 뒤에서 반사를 사용합니다. –

+1

수정 사항 : Firebase Java 클라이언트 라이브러리는 백그라운드에서 [Jackson 1.x] (http://jackson.codehaus.org/)를 사용하고 Jackson은 [자체 인트로 스펙트] (http://jackson.codehaus.org/ 1.9.9/javadoc/org/codehaus/jackson/map/introspect/package-summary.html), JavaBeans와는 다릅니다. –

관련 문제