안녕하세요! 이번 포스팅에선 로그인 시 ID저장버튼을 눌러 다음번에 로그인할 때 ID와 비밀번호를 굳이 타이핑하지 않아도 되게 하는 편의기능을 구현해 보겠습니다!
[완성된 실행화면]
화질이 좀 흐릿하긴 하지만 doldol이라는 아이디로 로그인 시 ID저장 버튼을 체크하고 로그인하면 앱을 껐다가 다시켜도 ID&비밀번호 내역이 남아있는 것을 보실 수 있습니다.
[코드설명]
[login_main.xml] - LoginActivity의 xml 파일
우선 체크박스를 하나 만들어 준후 id값을 auto_login이라고 부여합니다.
[LoginActivity.kt]
private fun loadData() {
val pref = getSharedPreferences("pref", 0)
binding.loginid.setText(
pref.getString(
"id",
""
)
) // 1번째 인자는 키 값, 2번째는 키 값에 데이터가 존재하지 않을경우 데체 값
binding.loginpass.setText(
pref.getString(
"password",
""
)
) // 1번째 인자는 키 값, 2번째는 키 값에 데이터가 존재하지 않을경우 데체 값
}
private fun saveData() {
val pref = getSharedPreferences("pref", 0)
val edit = pref.edit()//수정모드
edit.putString("id", binding.loginid.text.toString()) // 1번째 인자에는 키 값을 , 2번째 인자에는 실제 담아둘 값
edit.putString("password", binding.loginpass.text.toString())
edit.apply() // 값을 저장 완료
}
1. private fun saveData(){...}
> 체크박스 클릭 시 실행되는 함수로 현재 입력된 ID와 비밀번호를 기기 내부 데이터에 저장합니다.
2. getSharedPreferences("pref" , 0)
> "pref"라는 이름을 가진 SharedPreferences 파일을 가져옵니다. 이 파일은 XML 형식으로 내부 저장소에 저장됩니다.
3.val edit = pref.edit()
> pref라는 파일에 원하는 값을 넣을 준비를 합니다.
4.edit.apply()
> 넣어준 값을 저장완료 합니다.
1.private fun loadData(){....}
> 저장된 데이터를 불러오는 함수입니다.
2.binding.loginid.setText(pref.getString("id", ""))
> ID입력창(loginid)에 적힌 문구를 pref파일에 있는 key값이 id인 문구로 대체합니다.
만약에 pref파일에 불러올 데이터가 null일시엔 공백으로 대체합니다.
[onCreate에 작성할 부분]
override fun onCreate(savedInstanceState: Bundle?) { //해당 액티비티가 최초 실행되었을때 수행
/* 이 사이엔 앱이 실행되자마자 동작하는 여러 코드가 있는데 게시물과 관련없으니 생략*/
//TODO: 저장된 데이터를 로드
loadData() //저장되어 있던 값을 setText
val autoLoginCheck = findViewById<CheckBox>(R.id.auto_login) //체크박스 객체생성
autoLoginCheck.setOnCheckedChangeListener { _, isChecked -> //체크박스가 체크되어있는지 확인
if (isChecked) { // 체크 되어있으면 현재 아이디값을 /data/data/<your_package_name>/shared_prefs/경로로 저장.
saveData()
}
보시는 바와 같이 isChecked를 통해 체크박스가 클릭되어 있으면 위에서 작성했던 saveData()가 동작하고, 앱이 실행되자마자 loadData() 함수가 동작하여 저장해 놓았던 ID정보를 가져오게 됩니다! 만약 자동로그인을 구현하고 싶으면 앱이 실행되자마자 loadData() 이후 Login 버튼을 자동클릭하게 하면 구현이 되겠죠?
긴 글 읽어주셔서 감사합니다!
'모바일 앱개발(Kotlin-PHP-Mysql)' 카테고리의 다른 글
[Android Studio] 무선 디버깅 연결이 안될때 수동으로 연결하는법. (0) | 2024.10.07 |
---|---|
[Android Studio] 회원가입 기능 구현 - Kotlin (0) | 2024.10.05 |
[Android Studio] (Kotlin ↔ PHP ↔ MYSQL) 연동을 통해 로그인 기능 구현하기 (0) | 2024.10.02 |
[Android Studio] 같은 네트워크 환경에서 열어놓은 아파치 서버로 POST요청 보낼때 URL작성시 주의할 점! (0) | 2024.10.01 |
[Android Studio] layout폴더와 activity_main.xml 이 없을때 해결방법 (0) | 2024.09.27 |