어플리케이션을 개발하면서, SharedPreferences를 사용하는 경우가 많았다. 특히 SharedPreference를 사용하면서 반복적인 작업 (get/set작성) 에 의해 코드가 매우 길어지는 경우가 발생했다. 6주간 인턴십을 하면서 해당 방법을 적용해보고는 싶었지만 수정해야할 부분이 상당히 많았기 때문에 고민만 하고 실제로 적용하지는 않았다. 인턴십이 끝나고 어느정도 여유가 생긴 지금 Delegate를 통해 해당 문제를 개선해보고자 한다. SharedPreferences란? SharedPreferences란 데이터를 key-value 쌍으로 저장하고 검색하기 위한 도구이다. 어디에 사용할까? 일반적으로 앱을 종료하고 다시 시작해도 지속되어야 하는 기본 설정 값이나 앱의 설정 값을 저장하는 데 사..
버전에 따라 다른 사진 저장 방식 문제 상황 생성된 조언을 갤러리에 저장하는 과정에서, 안드로이드 버전에 따라 다르게 구현해야 하는 문제에 직면했다. 에뮬레이터는 Q 버전 이 후를 사용했기 때문에 MediaStore를 이용하여 개발을 하였다. 하지만, 테스트용 기기는 Q 버전 이전이라 실제로 저장이 안되는 문제가 발생하였다. 해결 방법 *Q버전 이전과 이후를 분리한다. 실행되는 기기의 버전을 확인하는 방법은 Build.VERSION.SDK_INT 로 확인이 가능하다. if 문을 통해 버전을 체크한다. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) 파일 이름 타임 스탬프를 사용하여 중복을 방지한다. 파일 식별자에서는 이름이 곧 고유 식별자이므로, 이름이 동일하..
Activity에서 fragment로 데이터를 전달할 때, 일반적으로 String인 경우에 putString으로 보낸다. 하지만, 보내야 하는 데이터가 많은 경우, 또는 List를 보내야 하는 경우에 하나하나 해줘야한다. 이러한 경우에는 객체로 보내면 된다. putSerializable을 사용한다. 이 글에서는 예제로 Data Class를 전달해본다. 아래와 같이 DataClass를 생성할 때, Serializable을 상속받아 생성한다. import com.capstone.traffic.model.network.sk.direction.dataClass.itineraries data class Serial(val ser: List?) : java.io.Serializable 이후에 아래와 같은 형태로 F..
intent를 이용하여, 다른 액티비티에 데이터를 전달하는 상황이 올 경우가 있다. 배열을 넘겨줄 수도 있지만, 데이터 클래스를 이용하여 전달하는 방법이 있다. parcelize 사용을 위해 plugins에 추가를 해준다. plugins{ id "kotlin-parcelize" } 그리고 전달하고자 하는 데이터 클래스를 정의할 때, 다음과 같이 정의를 해준다 (예시) @Parcelize data class NeighborLineData( val line : String, var left : String? = null, val center : String, var right : String? = null ) : Parcelable 전달은 다음과 같이 하면 된다. val nlData = NeighborLin..
Retrofit을 이용하여, 개발하던 중에 쿼리가 인코딩되어 정상적인 주소가 아니게 되는 경우가 발생했다. 서울시 실시간 열차 위치 정보를 받아오고자 아래의 예시처럼 요청인자 "2호선"을 @Path를 이용하여 사용했다. http://swopenapi.seoul.go.kr/api/subway/sample/xml/realtimePosition/0/5/2호선 하지만 결과적으로 아래와 같은 주소로 요청했다. http://swopenapi.seoul.go.kr/api/subway/77517057686b79763530594254676d/json/realtimePosition/0/1000/2%ED%98%B8%EC%84%A0 결과적으로 [2호선 -> 2%ED%98%B8%EC%84%A0] 로 인코딩되는 결과가 발생했다...
Jitpack 이란? 자바 라이브러리를 쉽게 배포해주는 것이다. 사용 방법 setting.gradle에 maven { url 'https://jitpack.io' } 를 추가한다. dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url 'https://jitpack.io' } } } 그리고 사용하고 싶은 라이브러리의 의존성을 build.gradle에 추가해준다. 나는 spinner를 사용하고자 하기에 아래를 추가해주었다. https://github.com/qandeelabbassi/Dropsy GitHu..