[Kotlin] 개발노트
1. Retrofit2 사용시 build() 중 에러 발생할 경우
아래와 같이 추가해주면된다. ( 2일동안 삽질함..)
android {
...
compileOptions {
targetCompatibility = "8"
sourceCompatibility = "8"
}
}
okhttp3 를 사용하기 때문에 추가해줘야한다고 하는데, 저게 무슨상관인지는 좀더 연구해봐야할듯.
2. 에러 해결하고 data get 할 때 아래와같이 onFailure가 발생하는 경우
02-03 22:39:34.336 23432 23432 E KTH : onFailure : java.net.UnknownServiceException: CLEARTEXT communication to openapi.airkorea.or.kr not permitted by network security policy
아래와같이 Manifest에 추가
<application
...
android:usesCleartextTraffic="true">
implementation 'com.squareup.okhttp3:logging-interceptor:4.3.1'
HrrpLoggingInterceptor 생성후 retrofit의 client로넣어준다. (알맞는 로그 레벨 설정, BODY, FULL ...)
val interceptor = HttpLoggingInterceptor()
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
val retrofit = Retrofit.Builder()
.baseUrl("http://openapi.airkorea.or.kr/")
.addConverterFactory(GsonConverterFactory.create(gson))
.client(client)
.build()
4. 데이터를 제대로 읽어오지 못할 경우 확이할 것들
Qeury를 통해 전달하는 문자열들에 encoded = true옵션을 주지 않았더니 죄다 에러가 발생했다.
(서비스 키 권한없다고해서 겨우 알아냈음..)
다행히 해당 옵션 추가하고는 정상동작함.
5. TabLayout / ViewPagaer 삽질
과거 android support library 예제를 보면서 jetpack library 로 그대로 포팅하니 아무리 해도 viewpager에 붙은 fragment가 나타나지 않는 현상이 발생함.
알고보니 jetpack library 에서는 TabLayout 은 ViewPagaer와 항상 함께 사용해야 하며 아래와 같이 ViewPagaer의 하위 Layout으로 TabLayout을 구성해야함.
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top" />
</androidx.viewpager.widget.ViewPager>
과거예제에서는 LinearLayout내에 TabLayout과 ViewPager가 동일 level에 선언을 했어야 했음.
(진짜 2일동안 개삽질...)
참고
안드로이드 스튜디오에서 주석 단추기를 쓰기 위해서 Shift + / 키와, Ctrl + Shift + / 키를 쓸때마다 동작하지 않는 케이스가 발생하여, 왜그런가 한참 헤맸는데, 아래 작업표시줄에 표시된 입력기가 한컴 입력기로 되어 있었다.

사진 설명을 입력하세요.
입력기를 한국어로 바꾸니 정상동작 한다. (한컴 입력기를 지워버리던지 해야겠다.)