일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- TwomonUSB
- withContext
- livedata
- 코틀린 트리거 버튼
- 코틀린 이미지저장 #파일저장
- Room 데이터베이스 업데이트
- 라이브데이터 postValue
- TowmonUSB 연결오류
- #큐구조 #큐다운로드
- 토글 험수
- apk이름변경
- mutable
- compse state
- 안드로이드 스튜디오 애뮬레이터
- json 저장
- var 와 val
- compse collectAsState
- 데이터바인딩
- Today
- Total
목록안드로이드 개발 (26)
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) ..
간단하게 말해서 내가 사용하고자 하는 함수가 메인스레드이면 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" } } }
아래 링크 참고. 퍼옴 https://medium.com/@nayantala259/android-how-to-read-and-write-parse-data-from-json-file-226f821e957a Android — How to Read and Write (Parse) data from JSON File ? How to Insert, Update and Delete the data available in JSON File in Android ? medium.com