📖 Today I Learned
🔮 학습 및 노트 정리
- 유효성 처리
private fun getMessageValidId(): String? {
val text = etId.text.toString()
if (etId.isVisible) {
val errorCode = when {
text.isBlank() -> SignUpErrorMessage.EMPTY_ID
(text.isNotBlank() && Pattern.matches("^[a-z0-9]*\$",text)) -> null
else -> SignUpErrorMessage.INVALID_PASSWORD
}
return errorCode?.let { getString(it.message) }
} else return null
}
유효성처리를 할 때 정규식 표현을 위와 같이 하니까 되었다. 튜터님이 작성한 코드를 이용해서 했을 때 자꾸만 에러가 났었는데 초기 의도가 달라서 계속 오류가 났던 것 같다. 튜터님은 정규식을 이용하여 입력된 값이 틀린 경우를 찾아낸 반면에 내가 찾은 정규식은 입력 값의 조건을 가지고 있어서 내 코드에서는 정규식이 match 된 경우에 null 또는 emptyString을 반환해 주어야 했다.
- EditText를 문자열로 바꾸기. / return@setOnClickListener
private fun btnLogin() {
btnLogin.setOnClickListener{
val userData = getUser(etId.text.toString())
when {
etId.text.toString().trim().isEmpty() -> {Toast.makeText(this, SignUpErrorMessage.EMPTY_ID.toString(), Toast.LENGTH_SHORT).show()
return@setOnClickListener}
etPw.text.toString().trim().isEmpty() -> {Toast.makeText(this, SignUpErrorMessage.EMPTY_PASSWORD.toString(), Toast.LENGTH_SHORT).show()
return@setOnClickListener}
(userData == null) -> {Toast.makeText(this, SignUpErrorMessage.PASSWORD_MISMATCH.toString(), Toast.LENGTH_SHORT).show()
return@setOnClickListener}
(userData.password != etPw.text.toString()) -> {Toast.makeText(this, SignUpErrorMessage.PASSWORD_MISMATCH.toString(), Toast.LENGTH_SHORT).show()
return@setOnClickListener}
}
val intent = Intent(this, MainPageActivity::class.java)
intent.putExtra("id", etId.text.toString())
intent.putExtra("pw", etPw.text.toString())
startActivity(intent)
}
}
EditText를 문자열로 바꿀때 앞에 .text를 무조건 넣어주어야 한다. 이거 때문에 한참 오류나서 헤멨다.
그리고 return@setOnClickListener을 해줌으로써 그 뒤에 남아있는 코드를 실행해주는 대신에 setOnClickListener을 다시 실행해주는 코드이다. 나중에 잘 알고 사용하면 유용할 것 같다.
- RegisterForActivityResult
private fun btnSignup() {
// registerForActivityResult 세팅
resultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
// ChooseProfileActivity에서 RESULT_OK가 반환되면 현재 액티비티 종료
// ChooseProfileActivity에서 바로 SignInActivity로 이동하는 형태가 됨
if (result.resultCode == RESULT_OK) {
// 먼저 SignInActivity로 아이디와 패스워드를 보냄
intent.putExtra("id", etId.text.toString())
intent.putExtra("password", etPassword.text.toString())
setResult(RESULT_OK, intent)
finish()
}
}
btnNext.setOnClickListener {
// 유저등록에 필요한 데이터와 함께 ChooseProfileActivity로 이동
var intent = Intent(this@SignUpActivity, ChooseProfileActivity::class.java)
intent.putExtra("name", etName.text.toString())
intent.putExtra("id", etId.text.toString())
intent.putExtra("password", etPassword.text.toString())
resultLauncher.launch(intent)
}
}
지난 번에 공부한 후에 RegisterForActivity를 이해한줄 알았는데 아니었다.. 지금도 솔직히 대충 이해된다..좀 더 공부해보는걸로..
💡 알고리즘 - 코틀린 : 프로그래머스 코드 카타
- 138477
https://occhiolism.tistory.com/82
[프로그래머스 • 코틀린] 명예의 전당 #138477
#138477 🎄 Question ? https://school.programmers.co.kr/learn/courses/30/lessons/138477 class Solution { fun solution(k: Int, score: IntArray): IntArray { var answer: IntArray = intArrayOf() return answer } } 🧩 Thought Process 사람 1,2,3이 작성한
occhiolism.tistory.com
추가로 완전탐색 기본 개념 공부를 했다.
https://occhiolism.tistory.com/81
[알고리즘] 완전탐색
뜻 가능한 경우의 수를 모두 조사해서 정답을 찾는 방법. 활용 완전 탐색 알고리즘 동작 과정 해결하고자 하는 문제의 가능한 경우의 수를 대략적으로 계산 가능한 모든 방법을 다 고려 실제 답
occhiolism.tistory.com
'내일배움캠프 (스파르타 코딩 클럽) 안드로이드 2기 > TIL' 카테고리의 다른 글
[TIL] 화면 재활용 | enum class | data class (0) | 2023.12.29 |
---|---|
[TIL] S.A 작성방법 | 커밋 컨벤션 | 에니메이션 추가 (0) | 2023.12.28 |
[TIL • 20231214] #22 (안드로이드 2기 본캠프) (0) | 2023.12.14 |
Fragment LifeCycle 프래그먼트 수명 주기 (0) | 2023.12.14 |
[TIL • 20231213] #21 (안드로이드 2기 본캠프) (0) | 2023.12.13 |