본문 바로가기

전체 글

(29)
android.os.BadParcelableException: Parcelable encountered IOException writing serializable object (name = model.Images) 아주 오래전에도 한번 만났던 오류인 것 같은데.. 에러가 발생했던 이유는... Serialize 할 수 없는 객체인 Uri를 DataClass 에서 사용하려고 했었기 때문이다. 아래 코드는 내가 작성한 Model 클래스다. import android.net.Uri import java.io.Serializable data class Images(val uri : Uri) : Serializable 이미지 하나만 보여주는 리사이클러뷰를 표현하기 위해서 위와 같이 개발했다. 갤러리에서 사진을 여러장 선택하면 사진 uri값이 list에 담기고, 인텐트를 사용해서 다음 화면(액티비티)로 넘겨주려고 했다. 해당 코드는 아래와 같다. ChooseMediaActivity.kt ... // onCreate 안이다. b..
java.lang.IllegalStateException: Flow invariant is violated:Emission from another coroutine is detected. 에러 내용 java.lang.IllegalStateException: Flow invariant is violated:Emission from another coroutine is detected. Child of StandaloneCoroutine{Active}@b93bc05, expected child of StandaloneCoroutine{Completed}@20ec45a. FlowCollector is not thread-safe and concurrent emissions are prohibited. To mitigate this restriction please use 'channelFlow' builder instead of 'flow' 아마 글자가 작아서 잘 안보이실분들을 위해서 사진으로..
FireBaseStorageCleanArchitecutre 예제 FireBase에서 storage에 이미지를 등록하는 절차를 클린아키텍쳐적용한 예제입니다. 이 예제를 통해서 공부할 수 있는 기술들 1. AndroidCleanArchitecture 2.FireBase Storage 3.Hilt 4.typealias(쉬운 개념이니 따로 구글링하시는 것도 좋습니다!) 예제만 보시고 싶으신 분들은 아래 링크를 참조하시면 되고요. https://github.com/YunSeokVV/FireBaseStorageCleanArchitecutrePractice 주의 google-service.json 파일을 반드시 따로 추가해주셔야 합니다!! 각자 Firebase Console 로 가셔서 프로젝트를 생성하고 나면 확인이 가능해요! 주인장이 나름 중요하다고 생각한 부분의 내용을 보고싶..
Flow (안드로이드) Flow란? -kotlin에서 제공해주는 비동기 통신을 도와주는 기능이다. 안드로이드에서 자주 사용되고 보통 반응형 UI를 만드는데 자주 사용된다. 보통 서버에서 데이터를 받아오거나 로컬DB에서 데이터를 받아올때 많이 사용된다. Flow는 코루틴 위에서 동작하기 때문에 본인이 코루틴에 관해서 잘 모른다면 먼저 코루틴에 관해서 선행학습을 해야할 필요가 있다. Flow의 구성요소 Flow에는 세가지 구성요소가 있다. Producer : 번역하면 생산자인데, 보통 repository를 일컫는다. repository에는 서버나 로컬에서 받아온 데이터를 갖는 저장소를 의미한다. Flow가 코루틴 위에서 동작하기 덕분에 데이터를 비동기적으로 받아올 수 있다. Intermediary : 번역하면 중재자이다. 이 녀석..
Hilt를 이용한 ViewModel 객체 생성 Hilt를 사용해서 VIewModel 객체를 뷰(Activity)에서 생성한뒤 사용하는 방법에 관해서 알아보겠습니다. 글의 뒷부분에서 Hilt를 사용하지 않고 viewModel 객체를 생성해서 사용하는 방법도 서술하겠습니다. 우서 이 글의 주제가 Hilt를 이용한 ViewModel 객체의 생성이니 관련 내용을 서술하도록 하겠습니다. ps. 현재 혼자서 공부하고 있는 프로젝트에서 코드를 사용하고 있어서 주제와 조금 관련이 없는 코드들도 섞여 있을 수 있겠네요. Hilt를 이용한 ViewModel 객체 생성하는 방법 우선 Hilt를 사용하기 위해서는 Application에서 @HiltAndroidApp 어노테이션을 사용해줘야 합니다. -Hilt를 사용하는 모든 앱은 @HiltAndroidApp으로 주석이 지..
viewPager2 Indicator 예제 라이브러리를 사용하지 않았습니다. indicator를 쓰기 위한 상당히 간단한 예제입니다. 깃허브 링크 https://github.com/YunSeokVV/viewPager2IndicatorExample/tree/master GitHub - YunSeokVV/viewPager2IndicatorExample: viewPager2 에 indicator를 적용한 간단한 예제 viewPager2 에 indicator를 적용한 간단한 예제. Contribute to YunSeokVV/viewPager2IndicatorExample development by creating an account on GitHub. github.com 구현하는데 참고한 사이트 https://dharmeshbasapati.medium...
프로그래머스 / 추억 점수 / 자바 아래와 같다. //https://school.programmers.co.kr/learn/courses/30/lessons/176963?language=java public class Question2 { public static void main(String[] args) { String[] name = new String[]{"may", "kein", "kain", "radi"}; int [] yearning = {5, 10, 1, 3}; String[][] photo = new String[][]{{"may", "kein", "kain", "radi"},{"may", "kein", "brin", "deny"},{"kon", "kain", "may", "coni"}}; Question2 question..
프로그래머스 / 원소들의 곱과 합 / 자바 // 출처 : https://school.programmers.co.kr/learn/courses/30/lessons/181929?language=kotlin fun main() { val question1 = Question1() val tmp = listOf(3, 4, 5, 2, 1) question1.solution(tmp.toIntArray()) } class Question1 { fun solution(num_list: IntArray): Int { var answer: Int = 0 var multiplySum = 1 var plusSum = 0 for (i in 0..num_list.size - 1) { multiplySum = multiplySum * num_list[i] plusSum =..