전체 글
-
[안드로이드] LiveData카테고리 없음 2024. 5. 20. 21:10
사용 이유데이터 변경을 UI에 알리기 위해 사용합니다.사용법 1. gradle 설정dependencies { implementation("androidx.fragment:fragment-ktx:1.7.0")} 2. ViewModel 생성LiveData로 데이터를 가지고 있고 변경을 감지할 수 있습니다.class MainViewModel : ViewModel() { private val _name = MutableLiveData() val name: LiveData = _input fun setName(name: String) { _name.value = name // LiveData에 데이터를 설정해준다. }} 3. ViewModel 이벤트 관리observe를 사용..
-
-
[안드로이드] HTML 가져온 데이터 특수문자 파싱카테고리 없음 2024. 5. 16. 13:08
유튜브 API에서 가져온 데이터를 그대로 넣었더니아래와 같이 특수문자가 제대로 표시되지 않았다. 이와 관련해서 찾아보니 HTML 포맷이 TextView에 적용되지 않아서 발생하는 문제라고 하네요아래와 같은 함수를 만들어 HTML 포맷을 적용시켜주어 문제를 해결하였습니다.fun String.toSpanned(): Spanned { return HtmlCompat.fromHtml(this, HtmlCompat.FROM_HTML_MODE_LEGACY)}videoTitleTextView.text = searchListItem.videoTitle.toSpanned()
-
[안드로이드] Retrofit카테고리 없음 2024. 5. 14. 10:02
Retrofit이란?서버와 클라이언트간에 HTTP 통신을 쉽게 도와주는 라이브러리입니다.사용법 1. gradle 설정개발에 필요한 gson, retrofit2, okhttp3를 적어줍니다.implementation("com.google.code.gson:gson:2.10.1")implementation("com.squareup.retrofit2:retrofit:2.9.0")implementation("com.squareup.retrofit2:converter-gson:2.9.0")implementation("com.squareup.okhttp3:okhttp:4.11.0")implementation("com.squareup.okhttp3:logging-interceptor:4.10.0") 2. API 받아..
-
[안드로이드] 도메인 레이어(UseCase) 사용 이유카테고리 없음 2024. 5. 13. 09:16
사용 이유도메인 레이어는 UI 레이어와 데이터 레이어 사이에 있습니다. (필수가 아닌 선택적으로 사용합니다)도메인 레이어는 복잡한 비즈니스 로직이나 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 담당합니다.장점1. 코드 중복을 방지합니다.2. 도메인 레이어를 사용하는 클래스의 가독성을 개선합니다.3. 책임을 분할하여 클래스가 커지는 걸 방지할 수 있습니다. (의존성 분리) 단점1. 데이터 레이어에 대한 단순한 호출도 UseCase를 통해 호출하게 되면 복잡성이 증가합니다.중요도메인 레이어를 간단하고 가볍게 유지하려면 기능 하나만 담당하며 변경 가능한 데이터가 포함되선 안됩니다.사용법invoke 함수를 operator로 정의하여 ViewModel에서 UseCase를 넘겨받아클래스를 함수처..
-
[Jetpack Compose] 데이터 불러오는 동안 로딩창 띄우기카테고리 없음 2024. 5. 10. 10:57
사용 이유데이터가 모두 불러와지지 않았는데 메인 화면이 띄워진다면사용자 입장에선 데이터 없는 화면을 보고 있을 것입니다. 이를 방지하기 위해 로딩창을 이용하여데이터가 모두 불러와지기 전까지 사용자를 로딩창에 묶어보겠습니다.사용법우선 로딩 상태를 관리할 ViewModel을 만들어줍니다.StateFlow를 사용하여 로딩 상태를 저장하였고 각각의 show/hide 함수로 상태를 제어하도록 했습니다.class LoadingViewModel : ViewModel() { private val _isLoading = MutableStateFlow(false) val isLoading: StateFlow = _isLoading.asStateFlow() fun show() { _isL..
-
[안드로이드] Parcelable (상)카테고리 없음 2024. 5. 10. 10:39
사용 이유원래 방법인 역/직렬화를 클래스 안에 직접 선언하여 만들게 됩니다.기본적으로 역/직렬화가 불가능한 클래스를 사용하거나 필드 변수가 있을 때 사용하면 되겠습니다.사용법data class Person( val name: String, val age: Int) : Parcelable { // parcel로부터 데이터를 받아와서 생성자로 생성해줍니다. constructor( parcel: Parcel ) : this( parcel.readString()!!, parcel.readInt() ) // parcel 안에 데이터를 넣어줍니다. override fun writeToParcel(parcel: Parcel, f..
-
[안드로이드] Parcelable (하)카테고리 없음 2024. 5. 7. 17:21
사용 이유 액티비티간에 데이터를 공유하기 위해 사용합니다. 자바에서 제공하는 Serializable보다 안정적이고 속도가 빠릅니다.사용법Parcelize 어노테이션을 사용하여 더욱 쉽게 Parcelable을 사용해보겠습니다.// 우선 gradle에 아래 항목을 추가해야 사용할 수 있습니다.plugins { id("kotlin-parcelize")}// @Parcelize 어노테이션을 단 Parcelable 상속하는 클래스를 만듭니다.@Parcelizedata class Person(name: String, age: Int) : Parcelableclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState:..