일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- compse state
- var 와 val
- compse collectAsState
- mutable
- withContext
- 라이브데이터 postValue
- Room 데이터베이스 업데이트
- livedata
- 코틀린 트리거 버튼
- 데이터바인딩
- TwomonUSB
- TowmonUSB 연결오류
- apk이름변경
- 토글 험수
- #큐구조 #큐다운로드
- 코틀린 이미지저장 #파일저장
- json 저장
- 안드로이드 스튜디오 애뮬레이터
- Today
- Total
목록전체 글 (31)
EnjoyLife
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) ..
https://developer.android.com/studio/write/annotations?hl=ko프로젝트에 주석 추가하기프로젝트에서 주석을 사용하려면 라이브러리나 앱에 androidx.annotation:annotation 종속 항목을 추가합니다. 그러면 추가하는 주석에 대해 코드 검사 또는 lint 작업을 실행할 때 검사가 이루어집니다.Jetpack Annotations 라이브러리 종속 항목 추가Jetpack Annotations 라이브러리는 Google의 Maven 저장소에 게시됩니다. 프로젝트에 Jetpack Annotations 라이브러리를 추가하려면 build.gradle 또는 build.gradle.kts 파일의 dependencies 블록에 다음 줄을 포함합니다.KotlinGroo..
간단하게 말해서 내가 사용하고자 하는 함수가 메인스레드이면 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") } 참쉽죠~
퍼옴 https://comeths.tistory.com/133 Error while waiting for device: Timed out after 300seconds waiting for emulator to come online. Android Studio 우측 상단의 AVD Manager를 누른 후 에러가 발생한 에뮬레이터를 우클릭한 후 Wipe Data를 선택한다. 해당 에뮬레이터를 다시 실행해 보면 에러가 발생하지 않는다. comeths.tistory.com 에러가 발생한 에뮬레이터를 우클릭한 후 Wipe Data를 선택한다.
buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } //아래 코드를 추가한다. applicationVariants.all { variant -> variant.outputs.all { outputFileName = parent.project.getName() +"_V${variant.versionName}_${new Date().format('YYMMdd')}.apk" } } }