일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- viewpager
- 코틀린
- build
- 의존성주입
- Gradle
- error
- ADB
- Github
- GIT
- dart
- 레트로핏
- studio
- 스튜디오
- 안드로이드
- Retrofit
- coroutine
- 안드로이드 스튜디오
- 에러
- Android
- 코루틴
- WebView
- 안드로이드스튜디오
- 웹뷰
- 유튜브
- Kotlin
- 안스
- 깃헙
- MVVM
- image
- RecyclerView
- Today
- Total
목록코틀린 (12)
코딩하는 일용직 노동자
const와 val은 모두 코틀린에서 상수를 선언하는 데 사용되는 키워드이지만, 값 할당 시점과 변경 가능성 측면에서 중요한 차이점을 가지고 있습니다. 1. 값 할당 시점: const: 컴파일 시점에 값 할당 컴파일 과정에서 상수 값이 직접 코드에 삽입됩니다. 런타임에서 값을 변경할 수 없습니다. 상수 선언은 반드시 파일의 최상단 또는 companion object 내에 있어야 합니다. 기본 자료형만 허용됩니다 (예: Int, String, Boolean, Double 등) val: 런타임 시점에 값 할당 변수 선언 시점에 값을 할당하거나, 후에 할당해야 합니다. 런타임에서 값을 변경할 수 없습니다. 상수 선언 위치에 제약이 없습니다. 모든 자료형 허용됩니다 (예: 객체, 함수, 배열 등) 2. 변경 가..
#의존성과 의존성주입(Dependency Injection, DI)이란? class Animal 이 있고, class Cat이 있습니다. 그리고 Cat 에서 Animal 객체를 생성했습니다. class Animal { ... } class Cat { val animal = Animal() } 코드에서처럼 Cat 이 Animal을 멤버로 갖고 있으므로 Cat 은 Animal에 강한 의존성을 가진 관계가 됩니다. class Cat(private val animal: Animal) { ... } fun main() { val animal = Animal() val cat = Cat(animal) } 이번에는 생성자를 통해 Animal객체를 주입해주었습니다. 이로써 클래스간의 관계를 더 약하게 만들 수 있습니다..
아주 기초적인 Retrofit2 사용법을 https://jsonplaceholder.typicode.com/posts 를 이용해 테스트해보는 방법을 알아보겠습니다. #기본 셋팅 Retrofit2를 사용하기 위해 gradle에 의존성 주입을 해줍니다. Manifest 파일에 인터넷 퍼미션을 추가해줍니다. // 의존성 추가 implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0' Manifest파일에 네트워크 기능을 이용하기 위한 퍼미션을 추가해줍니다. #RetrofitClient.kt BaseUrl 과 json 처리를 위한 GsonConverterFactor..
안드로이드에서 주로 Retrofit2 를 이용해 네트워크를 구현하게 됩니다. 이때, API의 호출결과로 정상적이라면 200이 내려올것이고, 정상적이지 않다면 400, 404, 406, 500 등 다양한 Response가 올 수 있습니다. Response 처리를 도와주는 라이브러리가 있어서 소개합니다. Sandwich는 Retrofit Response를 모델링하고 예외를 처리하기 위한 API 라이브러리입니다. https://github.com/skydoves/sandwich GitHub - skydoves/sandwich: 🥪 A lightweight sealed API library for modeling Retrofit responses and handling exceptions. 🥪 A lightwe..
#0 static 자바의 static처럼 코틀린에서도 인스턴스가 단 하나임을 보장하는 클래스를 만들 수 있습니다. 싱글턴 인스턴스는 전역적으로 사용될 수 있으며, 메모리를 효율적으로 이용할 수 있습니다. #1 Object 코틀린에서는 클래스 이름앞에 object 키워드를 붙이면 곧바로 싱글톤 클래스가 됩니다. 하지만 이경우에는 생성자를 호출하지 않는 클래스에서만 사용할 수 있습니다. import android.util.Log // 싱글톤 클래스를 만들려면 앞에 object 를 붙이면 된다. object MyObjectSingleton { fun printMsg(msg: String) { Log.d("MyObjectSingleton", "msg: $msg") } } #2 companion object 생성..
2019년 1월9일부터 안드로이드 SMS 권한정책이 변경되었습니다. 기존에는 RECEIVE_SMS 권한을 이용해서 SMS 내용을 읽고 인증번호를 자동입력을 해주었지만 이제는 예외신청을 하지 않으면 구글 플레이스토어에서 삭제 대상이 됩니다. https://developers.google.com/identity/sms-retriever/verify 이제는 SMS Retriever를 이용해서 권한 허용없이 문자를 읽어올 수 있습니다. 이 기능에는 약간의 제한사항이 있습니다. Android 단말에 Google Play Service version 이 10.2 이상 설치되어 있어야합니다. 그리고 SMS에도 몇가지 규칙이 있습니다. 1. 문자내용이 140byte를 초과하면 안됩니다. 2. SMS 맨앞에 가 반드시 ..
# 방법1 res/style.xml 파일 수정. 메니페스트 파일에서 theme 에 설정. # 방법2 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setStatusBarColor() window.statusBarColor = Color.parseColor("#ff0000") }
코틀린 안드로이드 웹뷰 셋팅. webView.settings.apply { this.setSupportMultipleWindows(false) // 새창 띄우기 허용 this.setSupportZoom(false) // 화면 확대 허용 this.javaScriptEnabled = true // 자바스크립트 허용 this.javaScriptCanOpenWindowsAutomatically = false // 자바스크립트 새창 띄우기 허용 this.loadWithOverviewMode = true // html의 컨텐츠가 웹뷰보다 클 경우 스크린 크기에 맞게 조정 this.useWideViewPort = true // html의 viewport 메타 태그 지원 this.builtInZoomControls =..
#1 어댑터 리사이클러뷰에 사용할 어댑터를 만듭니다. 3열의 그리드 형태로 표시할 수 있도록 속성값을 셋팅해줍니다. Glide 를 이용해 이미지를 표시할 수 있도록 util 패키지 아래에 imageLoader 클래스를 만들었습니다. class ImageLoader(private val context: Context) { fun imageLoadWithResourceID(resID: Int, v : ImageView) { Glide.with(this.context).load(resID).into(v) } fun imageLoadWithURL(url: String, v: ImageView) { Glide.with(this.context).load(url).into(v) } fun imageLoadWithFi..
#1 홈화면 만들기 Pixabay 에서는 검색어를 통해 이미지와 동영상을 검색할 수 있습니다. api도 이미지검색api 와 동영상검색api 가 제공됩니다. 우선 레이아웃을 만드는 것부터 시작하겠습니다. res/layout 폴더에 fragment_home.xml 파일을 생성해줍니다. 홈화면 상단에는 검색어를 입력할 EditText 와 검색버튼, 그 아래 영역엔 RecyclerView 를 배치시켰습니다. 레이아웃파일에는 데이터바인딩을 이용할 수 있도록 셋팅해줬습니다. #2 데이타바인딩을 이용해 이벤트 처리. 되도록 클릭이벤트는 fragment_home.xml 파일과 HomeViewModel 파일에서 바로 처리되도록 했습니다. 데이터바인딩을 쓸때 "@{ }" 와 "@={ }" 이 있는데 "@={ }" 를 쓰면..