흔히 웹페이지나 게임들을 할 때 로그인을 해야한다.
안드로이드 어플에서도 그런 기능을 넣을 수 있지 않을까 생각해서 만들어 보기로 했다.
음...
구성은 EditBox 2개와 CheckBox 한개로 구성되어 있고
기능은 CheckBox가 Click 되어있고 Login을 하게 되면 다음 번 Login할 때 ID가 남아있는 형태이다.
그럼 시작.
먼저 프로젝트를 하나 생성한다. (시대가 어떤시대인데 아직도 ADT Version이....-_-)
다음엔 생각했던 구성을 실제로 만들어야 한다.
main.xml
여기서 눈여겨 봐야 할것은
EditText의 inputType이다.
먼저 inputType은 PW를 입력하는 EditText에만 있는데 값을 입력하면...●●●●● 이렇게 표시된다
checked의 관한 설명은 코드를 본 후 하겠다.
다음은 LoginActivity.java 파일이다
코드에서 딱히 어려운 부분은 없을 것이다.
간략하게 설명을 하자면
일단 SharedPreferences는 프로그램이 종료되어도 데이터를 저장합니다.
그래서 ID/PW, 그리고 간략한 정보들을 저장하는데 아주 좋습니다.
(용량이 큰 Data는 SQL을 이용해야 겠죠 -_-;;)
SharedPreferences pref = getSharedPreferences("login", 0);
preference의 이름은 login이고 뒤에 값은 0 인데 이것은 읽기 쓰기 공유를 한다는 것이다.
login 이라는 이름은 나중에 값을 불러올 때 사용한다.
여기서 봐야 할것은 리스너 부분의
edit.putString("id", id);
edit.remove("id");
이다. 체크박스가 클릭되어 있으면 저장, 해제 되어있으면 삭제이다.
만약 위에 파일에서 boolean 값을 설정 안했을 경우를 예상해보자
1. 어플 실행
2. ID/PW 입력
3. CheckBox 체크
4. 어플 종료
5. 어플 재실행
6. ID/PW 입력이 되어있는 상태(preference) -> CheckBox의 상태는 해제되어있음(default)
7. 어플 종료
8. 어플 재실행
여기서 문제가 생김
분명 위에서 해제되어 있는 상태로 종료했음에도
9. 어플 재실행
10. 마찬가지로 ID/PW 입력이 되어있는 상태......-_-
이유는 무엇인가 하니 체크박스 리스너도 클릭리스너이기 때문이다. 클릭을 하지 않으면 실행이 되지 않기 때문에 해제가 되어 있더라도 preference의 값이 삭제가 되지 않는 것이다.
따라서 값을 읽어 온 다음 boolean 값을 바꾸어서 다음 번에 체크버튼을 누르지 않아도 값을 읽어오지 않는다. 그리고 저장을 하기 위해서는 다시한번 체크 버튼을 눌러야 하기 때문에 다시 저장이 된다.
그럼 이제 어플을 실행해보자
초기화면 - 입력후 체크버튼클릭 - 어플 재실행화면
'Programming > Android' 카테고리의 다른 글
구글맵 길찾기 (0) | 2012.10.25 |
---|---|
SWT / JFACE (0) | 2012.08.10 |
JNI, NDK (0) | 2012.08.10 |
C2DM 관련 링크 (0) | 2012.08.10 |
Custom Dialog를 대치할 수 있는 투명 Activity 만들기 (0) | 2012.07.12 |