춤추는 개발자

[6~7월] 개발 및 수정 사항 본문

우산 챙겨주는 알람시계/개발 과정

[6~7월] 개발 및 수정 사항

Heon_9u 2021. 6. 17. 17:56
728x90
반응형

210617

6/22까지 목표:

RecyclerView의 Drag & Drop과 Database에 변경 내용 저장하기

날씨 탭에 지역정보 적용하기

 

1. 미세먼지 관련 이미지 추가 (by Flaticon Freepik, DinosoftLabs)

 

2. LocationListView의 Layout 변경

광고가 적용되는 FrameLayout의 위치를 맨 위로 변경

RecyclerView와 FloatingActionButton을 RelativeLayout 하위에 위치시킴

LocationItem에 delete_Icon 적용

 

3. LocationListView에서 RecyclerView의 Drag & Drop 기능 구현

이제 Database에 적용해야 함!

 

 

Reference

https://jroomstudio.tistory.com/27

https://stackoverflow.com/questions/48820335/android-how-do-i-effectively-update-the-sqlite-database-when-dragging-and-dropp#


210621

https://jasonmcreynolds.com/?p=423

 

Drag & Drop 결과를 SQL에 적용하려면?

(주의사항: Alarm에서 lcation_id값 사용 중, id는 PK로 변경 불가

LocationListView는 Location_id의 오름차순 정렬로 유지)

 

(PK인 id는 유지, orderNum이라는 새로운 컬럼 추가 및 이를 기준으로 정렬)

1. Table을 초기화하여 다시 저장하기?

2. orderNum 컬럼만 업데이트하기?

 

 

만약, orderNum 컬럼을 추가할 경우의 SubTask

1. LocationDataBase.java에서 onCreate, createLocation, setLocationObject 메소드 수정

2. readAllLocation의 쿼리문 변경 (orderNum으로 오름차순 정렬)

3. LocationListView에서 drag & drop할 때, LocationList 객체들의 orderNum값 업데이트

( Collections.swap(List, from, to) )

4. LocationListView에서 onPause() 메서드 오버라이딩

(LocationList의 orderNum에 따라 Table 업데이트)

5. Dto > Location, LocationBuilder에서 orderNum 추가

 


210622

 

미세먼지 관련 로직 구현하기

1. Open API 문서 확인하며 작동과정 및 컬럼 정리하기

2. Dto 제작하기 및 FineDustAPI.java 구현하기

3. 현 위치에 따라 Test 진행하기

 

<FineDust Dto 컬럼>

측정소명, 미세먼지, 초미세먼지, 오존

 

<미세먼저 조회 순서>

Location 객체에 tmX, tmY 컬럼 추가하기, Location 객체 create할 때, TM좌표 검색 및 저장.

현재위치 -> TM좌표로 가까운 측정소 조회, 측정소명 획득 -> 측정소명, 데이터 기간(daily)으로 측정 정보 조회

 

1. TM좌표 조회

https://www.juso.go.kr/addrlink/devAddrLinkRequestGuide.do?menu=coordApi

 

2. 측정소명, 미세먼지, 초미세먼지, 오존 정보 조회

ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?stationName=종로구&dataTerm=month&pageNo=1&numOfRows=10&ServiceKey=서비스키&ver=1.3

 

추가 사항)

시간별 and 일별 예보 조회

 

또 다른 해결 방법)

1. 네이버 API

https://www.ncloud.com/product/applicationService/maps

*** 네이버 Maps API로 위경도 및 TM 좌표계 조회할 수 있는지 확인하기 ***

네이버 API로 TM128좌표 출력해서 미세먼지 API에 적용해보기 -> 만약 가능하다면 해당 API 활용

 

2. 그외에

기존 위치에서 for문으로 읍면동 찾기?

 


210624

1. 기존 위치를 split하고 마지막 글자에 (읍, 면, 동)이 있는 경우,

해당 문자열로 TM좌표 조회

2. FineDustApi.java에서 미세먼지 관련 api 구현

3. (1)번 기능 멀티 스레드 및 synchronized로 구현

 

*** 주의사항 ***

Open API 호출 시, 다른 스레드 또는 Task로 작업해야함!!

url 주소의 한글은 반드시 인코딩(UTF-8)이 필수

다른 스레드 또는 Task이기 때문에 메인 스레드와 동기화 구현이 필요함

 


210706

 

***코드 리팩토링 후***

목적: Java 코드 간결화, 데이터 변경에 따라 UI 자동으로 갱신, Adapter에서 객체 List업데이트 시, 수정된 데이터만 갱신

방안: MVVM과 Jetpack의 아키텍쳐 활용하기

 

1. SQLite 대신 Room 적용

-> ORM으로 Java의 객체와 DB의 Entity간의 자동 맵핑

테이블 변경이 용이하고, Annotation으로 CRUD와 쿼리문 적용 가능

컴파일 전에 쿼리문의 유효성 검사 가능

 

 

2. List<Object>의 LiveData

-> Observe 패턴으로 데이터의 변경점에 따라 UI 업데이트 가능.

개발자가 직접 코딩해야하는 수고를 덜어줌

 

 

3. Adapter와 item.xml에 DataBinding 적용

-> XML코드에 <layout>과 <data> 태그로 변수 설정

View마다 적절한 데이터를 XML단에서 적용 가능.

기존 Adapter에서 작성하던 ViewHolder 클래스onBindViewHolder 메서드의 코드 간결화

 

 

4. Adapter의 RecylcerView.Holder 상속 대신 ListAdapter 적용

-> ListAdapter의 DiffUtil.ItemCallback<T>으로 변경된 데이터만 갱신

List를 통째로 갱신하던 기존 방식을 개선

 

 

5. AdNativeClass 추가

-> 기존 AlarmListView Acitivty에 있던 Native Ad 코드를 분기

Activity의 코드 간결화

 

 

 

 

728x90
반응형