일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- TowmonUSB 연결오류
- withContext
- compse state
- Room 데이터베이스 업데이트
- mutable
- json 저장
- 코틀린 이미지저장 #파일저장
- 라이브데이터 postValue
- 데이터바인딩
- compse collectAsState
- livedata
- 안드로이드 스튜디오 애뮬레이터
- apk이름변경
- 코틀린 트리거 버튼
- Today
- Total
목록전체 글 (28)
EnjoyLife
class MainActivity : AppCompatActivity() { companion object { const val REQUEST_CODE = 1 } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val button = findViewById(R.id.button) button.setOnClickListener { val intent = Intent(this, SecondActivity::class.java) ..
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 }}
@Preview(showBackground = true)@OptIn(ExperimentalMaterial3Api::class)@Composablefun Test() { val viewModel: MainViewModel = viewModel() val inputTxt by viewModel.inputTxt.collectAsState() val outTxt by viewModel.outTxt.collectAsState()// var inputTxt by remember {// mutableStateOf("")// } Log.e("Test", "inputTxt: $inputTxt") //var outTxt by remember { mutableStateOf(..
서버에서 데이터 수신시 특수기호(+ , *,공백)에 대한 처리가 필요할 경우 아래 함수를 적용한다. 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) ..
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..