지금까지는 ViewHolder 안에 itemView를 넘기고 findByViewId()를 이용하여 필요한 View를 찾아 사용하는 방식을 사용했었다. 하지만 Kotlin-Extension을 이용하면 findByViewId() 함수를 소스코드에 직접 사용하지 않고 간단히 View에 접근 할 수 있다. class BoxViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { fun bind(item: Box) { itemView.txt_name.text = item.name } } 얼핏 보기에는 간단히 해결! 처럼 보일 수 있지만 사실은 그렇지 않다. Android Studio-Tools-Kotlin-Kotlin Byte Code에 들어가 decom..
SwipeRefreshLayout을 이용하여 RecyclerView를 새로고침 하는 기능을 만들고 있었다. 평상시에는 정상적으로 작동하는듯 하는데 간헐적으로 아래와 같은 에러가 발생하며 앱이 종료되었다. java.lang.IndexOutOfBoundsException: Inconsistency detected. 불일치가 감지되었다고 하는데 무슨 에러일까? 데이터 변경에 대한 범위를 정상적으로 지정해주지 않았을 때 발생해야 하는 에러인 것으로 추정된다. 나는 정상적으로 지정해준거같은데.. Inconsistency detected 에러가 발생하는 것을 보아 고민을 해본 결과 notifyItemRangeChanged(position, size)가 실행되는 동안 새로고침으로 또 데이터를 notifyItemRan..
Retrofit에 Rx를 같이 적용하면서 생긴 궁금증이었다. 처음에 Observable을 이용하여 만드는 소스를 봐서 당연히 Observable을 사용해야한다고 생각했었는데 Single을 사용해보라는 이야기를 들었는데 찾아보니 Observable에는 종류가 있었다. 과연 Single과 Observable에는 어떤 차이가 있을까? 먼저 Observable은 전송된 데이터를 관찰하는 관찰자 클래스이다. 따라서 Retrofit에서 데이터가 오는 것을 관찰하고있는다. Observable은 데이터가 전송되는 것을 계속 감지하게되는데 내가 사용한 REST API에서는 데이터를 1번 request하고 그에 대한 응답을 받은 뒤에는 계속해서 관찰할 필요가 없었다. 계속해서 관찰하는게 결국엔 메모리 낭비가 됨으로 dis..
KaKao REST API 를 통해서 검색기능을 만들 일이 생겼다. Retrofit을 사용하여 REST API를 사용해보자. model을 만드는 것은 생략한다. 우선 Retrofit 객체를 만든다. baseUrl에 https://dapi.kakao.com/ 가 들어가야한다. private fun retrofitInterface(): Retrofit { return Retrofit.Builder() .baseUrl("https://dapi.kakao.com/") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))..
네이버 아이디로 로그인 하기 위해서는 우선 developers.naver.com 에 가서 오픈 API를 신청해야 한다. 오픈 API를 신청하고 나면 아래와 같은 화면이 나타난다. 이후 현재 버전(작성 당시 4.2.0)에 맞는 sdk 파일을 https://developers.naver.com/docs/login/sdks/ 에서 다운 받는다. 이후 .aar 파일을 libs/에 넣고 gradle에 추가해준다. implementation 'com.naver.nid:naveridlogin-android-sdk:4.2.0' implementation files('libs/naveridlogin_android_sdk_4.2.0.aar') implementation 'com.android.support:appcompa..
기상청에서 제공하는 Json 파일을 이용하여 안드로이드에 시군구 데이터를 삽입하려 한다. Activity 안에서 URL을 이용하여 네트워크에 연결하려고 하였을 때 에러가 발생한다. 이는 main Thread(UI Thread)에서 너무 많은 동작을 요청했기 때문인데, 해당 문제는 AsyncTask 를 이용하는 방법으로 해결할 수 있다. 아래는 내가 이용했던 기상청의 url 인데, 지역코드와 지역명이 json의 형태로 들어있다. http://www.kma.go.kr/DFSROOT/POINT/DATA/top.json.txt http://www.kma.go.kr/DFSROOT/POINT/DATA/mdl.시의 지역코드.json.txt http://www.kma.go.kr/DFSROOT/POINT/DATA/lea..
다음 지도 API 앱 기본 설정 Kakao 개발자 사이트(https://developers.kakao.com)에서 앱 생성을 진행한다. 이후 지도 API를 안드로이드에서 사용할 것이기 때문에 내 애플리케이션-앱-일반에서 플랫폼 설정을 진행한다. 플랫폼 추가를 클릭하면 해당 창이 나오는데, 안드로이드 패키지 명을 입력하면 자동적으로 마켓 URL도 나타난다. 패키지 명을 입력하고 추가를 누르면 아래 창이 나오는데 키 해시의 값은 비어있는 것을 알 수 있다. 키 해시가 등록된 앱에서만 SDK를 이용하여 API를 호출할 수 있으므로 키 해시 값을 프로젝트에서 가져와보도록 하자. @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea..