가장 오래된 지도 사진
사진 제공 CEA + 라이선스에 따른 허가 CC BY 2.0
이 게시물에서는 다음과 같은 기본 요소에 대해 계속 살펴보고자 합니다. 카우치베이스 모바일 를 클릭하세요. 대부분의 정보는 iOS에도 적용됩니다. iOS와 크로스 플랫폼 도구에 대한 자세한 내용은 곧 발표될 예정입니다.
제가 왜 NoSQL로 전환하고 다음을 사용하는지에 대한 중간 수준의 개요를 읽을 수 있습니다. 카우치베이스 라이트 및 기타 모바일용 스토리지 옵션 대신 여기.
이 게시물 를 사용하면 몇 분 안에 Android에서 실행할 수 있습니다. 그리고 이것 에서는 기본적인 데이터베이스 작업을 살펴봅니다. 이 게시물에서 제가 사용하는 지도
광범위하게.
JSON을 직접 다루기
맵으로 많은 일을 할 수 있습니다. 종종 데이터를 목록과 같은 다른 구조로 가져올 수도 있습니다. 이 정도면 충분할 수도 있습니다. 다음은 필요한 타입캐스트의 예시입니다.
1 |
목록 댓글 = (ArrayList)문서.getProperty(COMMENTS_KEY); |
예제 앱에서는 댓글 집합을 문자열 배열로 저장했습니다. 여전히 키를 기반으로 배열을 가져와야 하지만 거기서부터 목록으로 처리할 수 있습니다.
더욱 정교한 터치
보다 정교한 애플리케이션의 경우 문서를 완전히 객체로 변환하는 것이 좋습니다.
JSON을 Java 객체로 변환하기 위한 여러 라이브러리가 있습니다. JSON 처리를 위한 Android의 표준 API에는 몇 가지 실질적인 제한이 있지만 기본 제공되므로 이점이 있습니다. Google에는 라이브러리가 있습니다, Gson. Gson은 소스에 액세스할 수 없는 경우를 처리할 수 있습니다. 저는 흥미로운 점을 발견했습니다. Gson 디자인 문서 를 참조하여 JSON을 처리할 때 고려해야 할 다른 사항에 대해 자세히 알아보세요.
이 글에서는 또 다른 인기 있는 JSON 라이브러리에 대해 이야기하려고 합니다, Jackson. Jackson은 상당히 성숙하고 JSON을 처리하는 세 가지 접근 방식을 지원하며 효율성에 대한 명성이 높습니다.
데이터 바인딩
잭슨의 세 가지 모드에 대한 자세한 내용을 읽어보세요. 여기 를 사용할 수 있습니다. 대부분의 앱 개발자는 아마도 데이터 바인딩 접근 방식입니다. 다소 어렵게 들릴 수도 있지만 실제로는 그렇지 않습니다. 여기서 데이터 바인딩은 자동화된 방식으로 JSON을 객체의 속성과 일치시키는 것을 의미합니다.
예를 들어, 데이터 바인딩은 다음을 의미합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
{ "id": "contact100", "type": "contact", "first_name": "John", "last_name": "Smith", "이메일": "john.smith@couchbase.com", "주소": [ { "address_line": "123 메인 스트리트", "city": "마운틴 뷰", "country": "US" }, { "address_line": "123 마켓", "city": "샌프란시스코", "country": "US" } ] } |
를 사용하여 이 인스턴스를 생성합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public 클래스 연락처 { public 문자열 id; public 문자열 유형; public 문자열 first_name; public 문자열 last_name; public 문자열 이메일; public 주소[] 주소; public 정적 클래스 주소 { public 문자열 주소_라인; public 문자열 도시; public 문자열 국가; } } |
잭슨은 도움 없이도 이 작업을 수행하는 방법을 꽤 잘 알아냅니다. 위의 필드는 모두 공개로 선언되었으므로 다른 작업을 수행할 필요가 없습니다. JSON 데이터가 하나의 지도
라고 불리는 이 스니펫은 a 연락처
인스턴스입니다.
1 |
연락처 연락처 = 매퍼.convertValue(지도, 연락처.클래스); |
위의 JSON이 Couchbase 문서의 데이터를 나타내는 경우 코드는 다음과 같을 것입니다.
1 |
연락처 연락처 = 매퍼.convertValue(문서.getProperties(), 연락처.클래스); |
필드가 공개되지 않은 경우 해당 게터와 세터가 있는 경우 이 방법이 작동합니다.
약간의 도움이 필요합니다: 주석
마지막으로 주석을 사용하여 객체 구성을 정말 세밀하게 제어할 수 있습니다. 잭슨 어노테이션은 강력합니다. 자세한 설명은 이 블로그의 범위를 벗어납니다. 주석에 대해 설명하는 좋은 가이드를 읽어 보세요. 여기.
POJO(플레인 올드 자바 객체)1
주석을 사용하는 데 도움이 되려면 기본 클래스로 시작하는 것이 유용하다는 것을 알았습니다. 다음은 코드입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@JsonInclude(포함.NON_NULL) public 클래스 POJO { @JsonIgnore 비공개 지도<문자열, 개체> 추가 속성 = new 해시맵<>(); @제이슨애니게터 public 지도<문자열, 개체> getAdditionalProperties() { 반환 이.추가 속성; } @제이슨애니세터 public void 설정 추가 속성(문자열 이름, 개체 값) { 이.추가 속성.put(이름, 값); } } |
첫 번째 주석 @JsonInclude(Include.NON_NULL)
은 잭슨에게 널 필드(즉, 데이터에서 누락된 항목)를 무시하도록 지시합니다.
코드와 함께 다음 세 개의 어노테이션을 사용하면 잭슨이 지정되지 않은 모든 필드를 처리할 수 있습니다. 잭슨은 사용자가 말하지 않은 모든 것을 추가 프로퍼티 맵에 기꺼이 채워 넣습니다. 즉, 코드가 날아갈 염려 없이 데이터를 변경할 수 있습니다. 말할 필요도 없이, 이 기능을 사용하면 실제 실수가 눈에 띄지 않을 수 있으므로 주의해서 사용하세요!
마지막으로, 직접 하는 것을 피하고 싶다면 클래스에 주석을 자동으로 달 수 있는 도구에 대한 링크를 참조하세요: http://www.jsonschema2pojo.org/
최종 참고 사항
카우치베이스 라이트는 현재 내부적으로 잭슨을 사용하고 있습니다. 많은 사람들이 다음과 같이 추천합니다. not 여기에 의존하고 있습니다. 라이브러리 충돌이나 기타 문제가 발생할 경우를 대비하여 이 점을 지적합니다.