컴퓨터/android, ios

[Android Studio] SharedPreferences에 로그인 정보 저장, 자동 로그인

정석이 2021. 9. 5. 17:55

 

로그인 정보를 SharedPreferences에 저장하기!

 

 

스피너로 로그인 주체를 정해서 로그인하는 방식이기 때문에.. 자동 로그인은 안하고 로그인 정보만 저장해놓을 것이다.

 

 

 

미리보기^^

 

 

 

 

 


 

 

 

로그인 정보 저장, 자동 로그인까지!

 

 

 

 

 

코드를 보자!

 

 

xml

 

 

<LinearLayout
        android:id="@+id/Layoutcustlogin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <EditText
            android:id="@+id/c_editText_main_searchID"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="10dp"
            android:textSize="12dp"
            android:paddingHorizontal="15dp"
            android:paddingVertical="15dp"
            android:hint="아이디"
            android:inputType="text"
            android:background="@drawable/round_1w_r3_style" />

        <EditText
            android:id="@+id/c_editText_main_searchPWD"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginHorizontal="10dp"
            android:layout_marginTop="5dp"
            android:textSize="12dp"
            android:paddingVertical="15dp"
            android:paddingHorizontal="15dp"
            android:hint="패스워드"
            android:inputType="text"
            android:background="@drawable/round_1w_r3_style" />

        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="로그인 정보 저장"
            android:id="@+id/cLoginCheck"
            android:layout_marginTop="20dp"
            android:layout_marginHorizontal="10dp"
            android:layout_gravity="left"/>

        <Button
            android:id="@+id/c_login_btn"
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_marginHorizontal="10dp"
            android:layout_marginTop="10dp"
            android:backgroundTint="#000000"
            android:text="로그인"
            android:textColor="@color/white" />

    </LinearLayout>

 

 

맨 위에 스피너에서 '소비자'를 선택했을 때의 layout이다.

 

 

 

 

 

class

 

public class MainActivity extends AppCompatActivity{

    private static String IP_ADDRESS = IP_ADDRESS;
    private static String TAG = "loginActivity";

    EditText cID, cPassword;
    Button cIdSignInButton;
    CheckBox cLogin;
    SharedPreferences cpref;
    SharedPreferences.Editor ceditor;
    Boolean cloginChecked;


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


        cID = (EditText) findViewById(R.id.c_editText_main_searchID);
        cPassword = (EditText) findViewById(R.id.c_editText_main_searchPWD);


        // Button
        cIdSignInButton = (Button) findViewById(R.id.c_login_btn);

        LinearLayout layoucustlogin = (LinearLayout) findViewById(R.id.Layoutcustlogin);


        cLogin = (CheckBox) findViewById(R.id.cLoginCheck);
        cLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(b){  // autologin 체크
                    cpref = getSharedPreferences("cpref",  Activity.MODE_PRIVATE);
                    ceditor = cpref.edit();
                    cloginChecked = true;
                }
                else{ // augologin 취소
                    cpref = getSharedPreferences("cpref",  Activity.MODE_PRIVATE);
                    ceditor = cpref.edit();
                    cloginChecked = false;
                    ceditor.clear();
                    ceditor.commit();
                }
            }
        });

        cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
        if (cpref.getBoolean("autoLogin", false)) {
            cID.setText(cpref.getString("id", ""));
            cPassword.setText(cpref.getString("pw", ""));
            cLogin.setChecked(true);
        }


        Spinner loginspinner = (Spinner) findViewById(R.id.loginspinner);

        loginspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                if(i==0){ //customer

                    layoutmanulogin.setVisibility(View.GONE);
                    layoutdislogin.setVisibility(View.GONE);
                    layoushoplogin.setVisibility(View.GONE);
                    layoucustlogin.setVisibility(View.VISIBLE);

                    // customer 로그인 버튼 클릭
                    cIdSignInButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            String id = cID.getText().toString();
                            String pwd = cPassword.getText().toString();

                            Response.Listener<String> responseListener = new Response.Listener<String>() {
                                @Override
                                public void onResponse(String response) {
                                    try{
                                        JSONObject jsonObject = new JSONObject(response);
                                        boolean success = jsonObject.getBoolean("success");
                                        if(success){
                                            Toast.makeText(getApplicationContext(), "로그인에 성공했습니다.", Toast.LENGTH_SHORT).show();

                                            if(cloginChecked) {
                                                cpref = getSharedPreferences("cpref",  Activity.MODE_PRIVATE);
                                                ceditor = cpref.edit();
                                                ceditor.putString("id", id);
                                                ceditor.putString("pw", pwd);
                                                ceditor.putBoolean("autoLogin", true);
                                                ceditor.commit();
                                            } else{}


                                            String id = jsonObject.getString("id");
                                            String name = jsonObject.getString("name");

                                            Intent intent = new Intent(MainActivity.this, csm_Activity.class);
                                            // 로그인 하면서 사용자 정보 넘기기
                                            intent.putExtra("name", name);
                                            intent.putExtra("id", id);
                                            startActivity(intent);

                                        } else {
                                            Toast.makeText(getApplicationContext(), "로그인에 실패했습니다.", Toast.LENGTH_SHORT).show();

                                            return;
                                        }
                                    } catch(Exception e){
                                        e.printStackTrace();
                                    }
                                }
                            };

                            cLoginRequest cloginRequest = new cLoginRequest(id, pwd, responseListener);
                            RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
                            queue.add(cloginRequest);

                        }
                    });
                }
                
                //등등... 나머지 스피너 내용은 위와 같다

 

 

 

여기서 봐야하는 부분

 

 

 

cLogin = (CheckBox) findViewById(R.id.cLoginCheck);
cLogin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if(b){ // autologin 체크
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
cloginChecked = true;
}
else{ // augologin 취소
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = cpref.edit();
cloginChecked = false;
ceditor.clear();
ceditor.commit();
}
}
});

 

 

 

로그인 체크박스를 누르면 cloginChecked = true가 되고 체크를 풀면  false + sharedpreferences에 저장했던 데이터를 clear하고 commit한다.

 

 

 

 

 

 

 

 

cIdSignInButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String id = cID.getText().toString();
String pwd = cPassword.getText().toString();

Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try{ // 로그인에 성공했을 때


JSONObject jsonObject = new JSONObject(response);
boolean success = jsonObject.getBoolean("success");
if(success){
Toast.makeText(getApplicationContext(), "로그인에 성공했습니다.", Toast.LENGTH_SHORT).show();


if(cloginChecked) {
cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
ceditor = mpref.edit();
ceditor.putString("id", id);
ceditor.putString("pw", pwd);
ceditor.putBoolean("autoLogin", true);
ceditor.commit();
} else{}

 

 

 

 

 

이 코드에서 제일 마지막 부분

 

if loginChecked가 true이면 = 체크박스가 눌린 상태이면

sharedPreferences에 id, pwd 내용을 저장하고 commit한다!

 

 

 

이 코드를 수행한 뒤

 

 

 

 

 

 

 

cpref = getSharedPreferences("cpref", Activity.MODE_PRIVATE);
if (cpref.getBoolean("autoLogin", false)) {
cID.setText(cpref.getString("id", ""));
cPassword.setText(cpref.getString("pw", ""));
cLogin.setChecked(true);
}

 

 

 

앱을 시작했을 때 sharedPreferences에 저장한 데이터를 받아오는 것이다~!

 

그리고 여기에 다음으로 넘어갈 화면을 연결해주면 로그인 정보 저장 뿐 아니라 자동 로그인도 되는 것이다~~~