서비스를 제공하면서 자동 로그인과 로그아웃은 필수로 들어가야 한다.
오늘 사용해볼 것은 SharedPreferences이다.
작은 값들을 핸드폰 내에 저장하여 필요할 때마다 키로 값을 불러 사용한다!
1. 사용할 로그인 페이지에서 자동 로그인 체크
나의 경우 로그인 액티비티에서 onCreate에 다음과 같이 넣어줬다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityHomeBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
//-----------------------
SharedPreferences sharedPreferences = getSharedPreferences("sharedPreferences", Activity.MODE_PRIVATE);
loginId = sharedPreferences.getString("id", null);
loginPwd = sharedPreferences.getString("pw", null);
if (loginId != null && loginPwd != null) {
//-----------------------
user = new Users();
user.setUserId(loginId);
user.setPassword(loginPwd);
loginCheck(user);
}
setListeners();
}
7번째 줄에 SharedPreferences 객체를 가져와준 후,
loginId = sharedPreferences.getString("id", null);
loginPwd = sharedPreferences.getString("pw", null);
getString(키, DefaultValue);로 값을 가져와주면 되는데 DefaultValue는 null로 주면 된다.
그리고 해당 키가 존재할 경우 변수에 대입해줄 것이다.
if (loginId != null && loginPwd != null) {
그렇게 가져온 값이 존재할 경우 로그인 처리를 해주면 되고, 없으면 로그인 시 값을 넣어주면 된다!
2. 로그인 시 자동 로그인 처리해주기
private void loginCheck(Users user) {
try {
//서버 통신이 아닐 경우 이 부분은 생략------
RequestBody formBody = new FormBody.Builder()
.add("userId", user.getUserId())
.add("password", user.getPassword())
.build();
String request = "restapi/login";
PostHttpClient postHttpClient = new PostHttpClient(request, formBody);
Thread th = new Thread(postHttpClient);
th.start();
String result = null;
long start = System.currentTimeMillis();
while (result == null) {
result = postHttpClient.getResult();
long end = System.currentTimeMillis();
if (end - start > 2000) {
return;
}
}
if (result.isEmpty()) {
Toast.makeText(getApplicationContext(), "아이디 또는 비밀번호가 맞지 않습니다.", Toast.LENGTH_SHORT).show();
} else {
//-----------------------------------------------
SharedPreferences sharedPreferences = getSharedPreferences("sharedPreferences", Activity.MODE_PRIVATE);
SharedPreferences.Editor autoLogin = sharedPreferences.edit();
autoLogin.putString("id", user.getUserId());
autoLogin.putString("pw", user.getPassword());
autoLogin.apply();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
} catch (Exception e) {
System.out.println(e);
}
}
나는 RestApi 서버와 통신하기 위해 HttpClient를 사용했지만 사용하지 않을 경우 주석처리를 지워주면 된다!
따라서 자동 로그인 키값 설정은 다음과 같다!
SharedPreferences sharedPreferences = getSharedPreferences("sharedPreferences", Activity.MODE_PRIVATE);
SharedPreferences.Editor autoLogin = sharedPreferences.edit();
autoLogin.putString("id", user.getUserId());
autoLogin.putString("pw", user.getPassword());
autoLogin.apply();
이 부분이 autoLogin 부분으로 자동 로그인을 설정해주는 부분이다.
설정 방법은 보이는 것처럼 아래의 형태로 이루어져 있어 나중에 앱 실행 시 자동 로그인이 실행될 경우 아래의 키, 값을 사용하게 된다.
autoLogin.putString(키, 값);
3. 로그아웃
로그아웃은 꽤 간단하다.
SharedPreferences sharedPreferences = getSharedPreferences("sharedPreferences", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove("id");
editor.remove("pw");
editor.apply();
이렇게 editor.remove()에 키를 넣어주어 삭제 후 로그아웃 처리를 해주면 된다!
editor.clear();
clear 함수도 있는데 이거는 모든 데이터를 삭제하는 모양이다.
따라서 다른 데이터가 존재할 경우엔 remove로 삭제해주는 것이 좋을 것 같다!
※마지막에 apply 잊지 않기
editor.apply();
'JAVA > Android' 카테고리의 다른 글
[Android] 액션 바 버튼 클릭 이벤트 넣기 (0) | 2022.10.27 |
---|---|
[Android] Caller needs to hold android.permission.SCHEDULE_EXACT_ALARM to set exact alarms. (0) | 2022.10.26 |
[Android] anim/fragment_fade_enter, anim/fragment_fade_exit not found (0) | 2022.10.26 |