일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 안드로이드스튜디오 jdk
- TwomonUSB
- 생분해성 플라스틱
- TowmonUSB 연결오류
- #큐구조 #큐다운로드
- var 와 val
- 셀룰로오스-g-폴리락타이드 공중합체
- 1회용컵
- compse collectAsState
- livedata
- bluetoothmanager
- 안드로이드 스튜디오 애뮬레이터
- compse state
- withContext
- json 저장
- 안드로이드 sms
- 안드로이드 비콘
- Room 데이터베이스 업데이트
- apk이름변경
- 일회용 플라스틱
- 토글 험수
- viewmodelscope
- 코틀린 트리거 버튼
- 라이브데이터 postValue
- 코루틴 job
- 1회용 플라스틱컵
- 플라스틱 생분해
- 스레드 #코루틴
- 안드로이드 mvvm
- 코틀린 이미지저장 #파일저장
- Today
- Total
목록안드로이드 개발/개발팁 (26)
EnjoyLife
val isOpen = MutableLiveData(false) fun toggleVisibility() { isOpen.value = !(isOpen.value ?: false) } 위 코드와 아래코드는 동일하다. 위의 코드가 간결하기에 위의 코드를 항상 사용하는데, 항상 헷갈린다.그래서 여기에 기록한다 ㅜㅜ val isOpen = MutableLiveData(false)fun toggleVisibility() { if (isOpen.value == true) { isOpen.value = false } else { isOpen.value = true }}
서버에서 데이터 수신시 특수기호(+ , *,공백)에 대한 처리가 필요할 경우 아래 함수를 적용한다. fun encodeUrlPart(originalUrl: String): String { val url = URL(originalUrl) val path = url.path.split("/").joinToString("/") { URLEncoder.encode(it, StandardCharsets.UTF_8.toString()) .replace("%2F", "/") .replace("+", "%20") .replace(" ", "%2B") } val ..
val numbers = listOf(1,2,3) 와 val numbers = mutableListOf(1,2,3) 에서 val 의 쓰임새가 완전히 다르다. 1) numbers 에 mutableListOf 객체생성을 하고 또 아래처럼 객체를 생성하거나 numbers = mutableListOf(5,7,23,44) 2) 다른 변수의 주소를 참조하게 하면 오류를 발생시킨다. val murisu = mutableListOf(1,2,3) numbers = murisu 즉 자바개념으로 설명하면 new로 생성후 다시 new 생성만 하지 않으면 된다. 그리고 참조주소를 변경하면 안된다. 아래처럼 같은주소안에 값을 수백번, 수천번 변경해도 상관없다.아주 중요한 개념이다. number[0] = 4num..
fun downloadImage(url: String, folderName: String, fileName: String?) { val appContext = applicationContext() //본인코드에 맞게 가져온다. // 폴더 생성 val folder = File(appContext.filesDir, folderName) if (!folder.exists() && !folder.mkdirs()) { Log.e("FileRepository", "Failed to create directory: $folderName") return } // 파일 경로 설정 val outputFile = File(folder, fileName) ..
간단하게 말해서 내가 사용하고자 하는 함수가 메인스레드이면 value를 사용, 백그라운드스레드이면 postValue를 사용한다. 그럼 내가 사용하는 함수가 메인스레드안에 있는지, 백그라운드 스레드안에 있는지 어떻게 알아? 아래코드로도 쉽게 확인가능하고, 간단한 지식만 있으면 직관적으로 파악이 가능하다. if (Thread.currentThread() == Looper.getMainLooper().thread) { // 현재 코드가 메인 스레드에서 실행됩니다. Log.d("test","This code is running on the main thread.") } else { // 현재 코드가 백그라운드 스레드에서 실행됩니다. Log.d("test","This code is running on a back..
백그라운드 스레드 사용해서 메인UI에 접근이 필요할 경우 사용한다. 예를 들어, API 통신시 결과값으로 CoroutineScope(Dispatchers.IO).launch 안에서 플레이어 화면 갱신 또는 위젯접근시 반드시 withContext(Dispatchers.Main) 을 사용해야 한다. viewModelScope.launch(Dispatchers.IO) { // 백그라운드 스레드에서 실행되는 코드 val data = database.loadData() // 데이터베이스에서 데이터를 로드합니다. withContext(Dispatchers.Main) { // 메인 스레드로 전환하여 UI 업데이트 수행 textView.text = data // TextView의 텍스트를 업데이트합니다. } // wi..
퍼옴:"이것이 안드로이드다 with 코틀린" 책의 저자이신 "고돈호"님의 코드입니다. 05장 2.2 리사이클러뷰 > 이것이안드로이드다with코틀린 | flow9.net - 코틀린, 안드로이드 05장 2.2 리사이클러뷰 > 이것이안드로이드다with코틀린 | flow9.net - 코틀린, 안드로이드 본문 ###MainActivity ``` class MainActivity : AppCompatActivity() { val binding by lazy {ActivityMainBinding.inflate(layoutInflater)} override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentVi..
버튼 xml android:onClick="@{()->learnViewModel.onHideDeleteEvent(!learnViewModel.isDelete)}" 뷰모델 var isDelete = MutableLiveData() fun onHideDeleteEvent(isClick:Boolean) { isDelete.value = isClick } 액티비티 learnViewModel.isDelete.observe(this){ Timber.e("isDelete = $it") } 참쉽죠~