자동로그인 기능 구현


자동로그인을 구현하는 로직은 다음과 같이 설계하였다.

로그인 버튼을 누를 경우, autoLogin 을 선택하였는지 값을 boolean 값으로 받는다.

만약 autoLogin == true 라면 해당 id와 password를 preference에 저장한다. 그 후, 앱을 종료했다 켰을 경우 preference에 값이 있다면 그 값을 읽어서 id와 password의 EditText에 써지도록 구현할 예정이다.

activity_main.xml 파일은 전에 구현한 것과 동일하다.

MainActivity.java

package com.example.myapp;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class MainActivity extends AppCompatActivity {
    Button btnLogin, btnJoin, btnProduct;
    EditText loginID, loginPassword;
    RadioButton autoLogin;
    String id, password, autoID, autoPassword;
    boolean autoCheck;

    SharedPreferences memberPref;
    SharedPreferences.Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnLogin = (Button) findViewById(R.id.btnLogin);
        btnJoin = (Button) findViewById(R.id.btnJoin);
        btnProduct = (Button) findViewById(R.id.btnProduct);

        //id, password 값 받기
        loginID = (EditText) findViewById(R.id.loginID);
        loginPassword = (EditText) findViewById(R.id.loginPassword);
        autoLogin = (RadioButton) findViewById(R.id.autoLogin);

        //자동로그인
        try{
            memberPref = getSharedPreferences("memberPref", joinActivity.MODE_PRIVATE);
            if(memberPref.getBoolean("autoCheck", false)){
                loginID.setText(memberPref.getString("autoID", ""));
                loginPassword.setText(memberPref.getString("autoPassword", ""));
                autoLogin.setChecked(false);
            }
        }catch (Exception e){

        }

        //로그인 눌렀을 경우
        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                id = loginID.getText().toString();
                password = loginPassword.getText().toString();
                autoCheck = autoLogin.isChecked();

                //아이디, 비밀번호 맞음
                if (password.equals(passwordCheck(id))) {
                    if (autoCheck) {
                        editor = memberPref.edit();
                        editor.putString("autoID", id);
                        editor.putString("autoPassword", password);
                        editor.putBoolean("autoCheck", autoCheck);
                        editor.commit();
                    }
                    //product 화면으로 이동
                    Intent intent = new Intent(getApplicationContext(), ProductActivity.class);
                    intent.putExtra("intentId", id);
                    startActivity(intent);
                    finish();

                }
                //에러 처리
                else {
                    //아이디 틀림
                    if (passwordCheck(id) == null) {
                        Toast.makeText(getApplicationContext(), "아이디를 다시 입력하세요.",
                                Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(getApplicationContext(), "비밀번호를 다시 입력하세요.",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });

            //회원가입 눌렀을 경우
            btnJoin.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(getApplicationContext(),
                            joinActivity.class);
                    startActivity(intent);
                }
            });
    }

    //로그인 기능 - 회원가입 정보랑 맞는지 확인
    public String passwordCheck(String id) {
        //회원가입 정보 가져오기
        String tmp = null;
        try {
            FileInputStream fs = openFileInput(id);
            BufferedReader reader = new BufferedReader(new InputStreamReader(fs));
            reader.readLine();
            tmp = reader.readLine();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return tmp;
    }

 }
//자동로그인
        try{
            memberPref = getSharedPreferences("memberPref", joinActivity.MODE_PRIVATE);
            if(memberPref.getBoolean("autoCheck", false)){
                loginID.setText(memberPref.getString("autoID", ""));
                loginPassword.setText(memberPref.getString("autoPassword", ""));
                autoLogin.setChecked(false);
            }
        }catch (Exception e){

        }

앱을 실행할 때, try문을 통해 preference에 저장된 값을 읽을 수 있도록 하였다.

if (autoCheck) {
                        editor = memberPref.edit();
                        editor.putString("autoID", id);
                        editor.putString("autoPassword", password);
                        editor.putBoolean("autoCheck", autoCheck);
                        editor.commit();
                    }

로그인 할 경우 autoCheck가 true라면 preference에 값을 저장하였다.

이번 시간에는 preference를 활용하여 값을 저장하고 읽는 것을 해보았다. 회원가입을 할 때 preference로 삽질을 해서, 이번에 자동 로그인을 구현하는 것은 그리 어렵지 않게 끝낼 수 있었다.