본문 바로가기

Android

안드로이드 로그아웃 예제

⭐️⭐️ 안드로이드 액티비티는 스택에 계속 쌓이기 때문에 각 액티비티의 흐름을 제어해줄 필요가 있다. ⭐️⭐️

-> 이때 Intent Flag를 이용하여 제어할 수 있음!!

 

1. setFlags: 하나의 flag를 지정한다.

2. addFlags: 기존 flag + 새 flag

 


 

기존 코드) 로그아웃 -> 첫 화면으로 넘어감

문제점) 뒤로가기 눌렀을 때 전의 기록이 다 남는다는 걸 깨달음..!!

해결) 플래그 설정

 

Intent.FLAG_ACTIVITY_CLEAR_TOP

실행하는 액티비티가 스택에 있으면 새로 시작하지 않고 상위 스택 모두 제거

ex. [ABCDE]가 있고, E에서 C를 열면 상위 DE제거

 

Intent.FLAG_ACTIVITY_SINGLE_TOP

액티비티가 이미 최상단에 있으면 다시 시작하지 않고 재사용

ex. [ABCDE]가 있고, E에서 E를 열면 onPause()->onNewIntent() -> onResume()

 

로그아웃 코두

Button logoutButton = (Button) findViewById(R.id.logoutButton);
logoutButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                Toast.makeText(MemberPageActivity.this, "로그아웃 되었습니다.", Toast.LENGTH_SHORT).show();
                Intent i = new Intent(MemberPageActivity.this, MainActivity.class);
                i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(i);
            }
        });

 

회원탈퇴 코드

service.userDelete(new DeleteData(input_pw, input_id)).enqueue(new Callback<DeleteResponse>() {
        @Override
        public void onResponse(Call<DeleteResponse> call, Response<DeleteResponse> response) {
                DeleteResponse result = response.body();
                Toast.makeText(MemberPageActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show();

                if (result.getCode() == 200) {
                        Intent i = new Intent(MemberPageActivity.this, MainActivity.class);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                }
        }
}

 

 

로그아웃을 했을 때는 로그인 창에 아이디/비밀번호가 그대로 남고(?) 회원탈퇴를 했을 때는 모두 없어지게 했다!

(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)

회원탈퇴 - 액티비티가 재시작)

 

 

 

 

로그아웃 다이얼로그 추가 + 위에 코드랑 합친 코드

        logoutButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("로그아웃").setMessage("로그아웃 하시겠습니까?")
                        .setPositiveButton("로그아웃", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {
                                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
                                startActivity(intent);
                            }
                        })
                        .setNegativeButton("취소", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {

                            }
                        })
                        .show();
            }
        });

 

핵심부분

Intent i = new Intent(Main1_main.this, Login.class);
        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(i);

 

 

 

회원 탈퇴 다이얼로그 + 위에 코드랑 합친 코드

 

   withdrawalButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("회원탈퇴").setMessage("회원탈퇴 하시겠습니까?")
                        .setPositiveButton("회원탈퇴", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {

                                // 서버로부터 응답을 받아 처리하는 리스너 정의
                                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) {
                                                // 회원탈퇴 처리가 성공적으로 완료되었을 때
                                                Intent intent = new Intent(MainActivity.this, LoginActivity.class);
                                                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                                                startActivity(intent);
                                                Toast.makeText(getApplicationContext(), "회원 탈퇴 처리가 완료되었습니다.", Toast.LENGTH_SHORT).show();
                                            } else {
                                                // 회원탈퇴 처리에 실패했을 때
                                                Toast.makeText(getApplicationContext(), "회원 탈퇴에 실패했습니다.", Toast.LENGTH_SHORT).show();
                                            }
                                        } catch (JSONException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                };

                                // 회원탈퇴 요청을 서버에 Volley를 이용해서 요청함.
                                UnregisterRequest unregisterRequest = new UnregisterRequest(userEmail, responseListener);
                                RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
                                queue.add(unregisterRequest);

                            }
                        })
                        .setNegativeButton("취소", new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int whichButton) {

                            }
                        })
                        .show();
            }
        });

 

 

 

로그아웃을 했을 때는 로그인 창에 아이디/비밀번호가 그대로 남고(?)

(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)

 

회원탈퇴를 했을 때는 모두 없어지게 했다! 회원탈퇴 - 액티비티가 재시작)

 

 

 

로그아웃

(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)

 

 

회원탈퇴

회원탈퇴를 했을 때는 모두 없어지게 했다! 회원탈퇴 - 액티비티가 재시작)

 

 

참고 

https://jhshjs.tistory.com/50