일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- compse state
- 안드로이드 스튜디오 애뮬레이터
- TowmonUSB 연결오류
- 안드로이드 mvvm
- #큐구조 #큐다운로드
- compse collectAsState
- 셀룰로오스-g-폴리락타이드 공중합체
- 코루틴 job
- 라이브데이터 postValue
- 플라스틱 생분해
- json 저장
- 안드로이드 비콘
- 스레드 #코루틴
- 코틀린 트리거 버튼
- 안드로이드 sms
- viewmodelscope
- 비콘스캐닝
- 모의위치 주입
- TwomonUSB
- 코틀린 이미지저장 #파일저장
- apk이름변경
- 1회용 플라스틱컵
- withContext
- 토글 험수
- 안드로이드스튜디오 jdk
- 코루틴스코프
- var 와 val
- Room 데이터베이스 업데이트
- 커스텀스피너
- bluetoothmanager
- Today
- Total
목록안드로이드 개발/개발팁 (29)
EnjoyLife
// 다운로드 대기열을 저장하는 리스트, 두 번째 요소는 Any 타입으로 파라미터로 대체 가능private val downloadQueue = mutableListOf>()var isDownloading = falsefun main() { // 대기열에 항목 추가 addToDownloadQueue("http://example.com/file1.zip", "day1", 1) addToDownloadQueue("http://example.com/file2.zip", "day2", 2) addToDownloadQueue("http://example.com/file3.zip", "day3", 3) // 특정 pos 값을 가진 항목 제거 removeFromDownloadQu..
둘다 val 타입이지만 각각 mutableList,list 타입인 변수 val displayList1: MutableList = mutableListOf("Apple", "Banana", "Cherry", "Date") val displayList2: List = listOf("Apple", "Banana", "Cherry", "Date") "MutableList 형을 쓰면 무조건 쓰기가 가능하다는 것이니, 무조건 var 를 써야이 무슨 소리야?" 생각할 수있다. 나도 그랬으니까. "헷갈리니 그냥 var 로 무조건 쓸래" 할수 있다. 이건 유지보수할 경우, 아주 치명적인 후회로 남을수 있다. val displayList1: MutableList ㄴ 리스트의 항목 추가,수정은 가능하지만, 새로운 리스트로 ..
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 }}
서버에서 데이터 수신시 특수기호(+ , *,공백)에 대한 처리가 필요할 경우 아래 함수를 적용한다. 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..