MyCloud

[안드로이드] 간단한 로그인 화면 만들기 (2) 본문

Programming/Android

[안드로이드] 간단한 로그인 화면 만들기 (2)

Swalloow 2016. 5. 1. 04:41



간단한 로그인 화면 만들기 - 자동로그인 기능


이전에 만들었던 화면에 자동로그인 기능을 붙여보도록 하겠습니다.

이 예제에서는 자동로그인을 위해 오직 SharedPreference만 사용했지만

나중에 아이디와 비밀번호는 SQLite에 저장되도록 변경할 예정입니다.

화면은 다음 링크를 참고하시면 됩니다. http://swalloow.tistory.com/58




SharedPreference에 대한 정보는 http://swalloow.tistory.com/59 에서 확인하실 수 있습니다.

먼저 java 파일로 가서 사용할 객체를 생성합니다.

EditText idInput, passwordInput;
CheckBox autoLogin;
SharedPreferences pref;
SharedPreferences.Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idInput = (EditText) findViewById(R.id.emailInput);
passwordInput = (EditText) findViewById(R.id.passwordInput);
autoLogin = (CheckBox) findViewById(R.id.checkBox);
}

우선 올바른 아이디와 비밀번호가 입력되는지 확인하는 기능이 필요합니다.

따라서 아이디와 비밀번호가 일치하는지 확인하는 loginValidation 함수를 아래와 같이 만들어줍니다.

private boolean loginValidation(String id, String password) {
if(pref.getString("id","").equals(id) && pref.getString("pw","").equals(password)) {
// login success
return true;
} else if (pref.getString("id","").equals(null)){
// sign in first
Toast.makeText(MainActivity.this, "Please Sign in first", Toast.LENGTH_LONG).show();
return false;
} else {
// login failed
return false;
}
}

Preference에서 받아온 정보와 일치하면 true를 반환하고,

저장된 정보가 없거나 일치하지 않으면 false를 반환합니다.

나중에 SQLite를 사용하게 되면 조건문 안의 정보를 바꾸어야 합니다.






로그인 확인이 끝났으니 이제 로그인을 처리해주어야 합니다.

처리하기 전에 autoLogin 값이 체크되었는지에 따라 처리과정이 달라집니다.

따라서 자동로그인 체크박스의 값을 받아오는 리스너를 생성합니다.

autoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
loginChecked = true;
} else {
// if unChecked, removeAll
loginChecked = false;
editor.clear();
editor.commit();
}
}
});

자동 로그인이 체크되어 있으면 true를 아니면 Preference에 저장된 모든 값을 삭제합니다.

이제 자동로그인에 따라 로그인을 처리하는 전체 소스입니다.

public class MainActivity extends AppCompatActivity {

EditText idInput, passwordInput;
CheckBox autoLogin;
Boolean loginChecked;
SharedPreferences pref;
SharedPreferences.Editor editor;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
idInput = (EditText) findViewById(R.id.emailInput);
passwordInput = (EditText) findViewById(R.id.passwordInput);
autoLogin = (CheckBox) findViewById(R.id.checkBox);

// if autoLogin checked, get input
if (pref.getBoolean("autoLogin", false)) {
idInput.setText(pref.getString("id", ""));
passwordInput.setText(pref.getString("pw", ""));
autoLogin.setChecked(true);
// goto mainActivity

} else {
// if autoLogin unChecked
String id = idInput.getText().toString();
String password = passwordInput.getText().toString();
Boolean validation = loginValidation(id, password);

if(validation) {
Toast.makeText(MainActivity.this, "Login Success", Toast.LENGTH_LONG).show();
// save id, password to Database

if(loginChecked) {
// if autoLogin Checked, save values
editor.putString("id", id);
editor.putString("pw", password);
editor.putBoolean("autoLogin", true);
editor.commit();
}
// goto mainActivity

} else {
Toast.makeText(MainActivity.this, "Login Failed", Toast.LENGTH_LONG).show();
// goto LoginActivity
}
}

// set checkBoxListener
autoLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
loginChecked = true;
} else {
// if unChecked, removeAll
loginChecked = false;
editor.clear();
editor.commit();
}
}
});
}

private boolean loginValidation(String id, String password) {
if(pref.getString("id","").equals(id) && pref.getString("pw","").equals(password)) {
// login success
return true;
} else if (pref.getString("id","").equals(null)){
// sign in first
Toast.makeText(MainActivity.this, "Please Sign in first", Toast.LENGTH_LONG).show();
return false;
} else {
// login failed
return false;
}
}
}

자동 로그인이 체크되어 있다면 바로 메인 화면으로 넘어가고

체크되어 있지 않다면, loginValidation을 통해 체크하고 값이 일치하면 다음 화면으로,

일치하지 않으면 "Login Failed" 라는 토스트 메세지를 보여줍니다.

아직 완성되지 않았기 때문에 중간에 주석으로 처리한 부분이 있습니다.



xml을 포함한 전체 프로젝트는 아래 링크를 통해 확인하실 수 있습니다 !

GitHub : https://github.com/Swalloow/AndroidStudy/tree/master/AutoLogin




Comments