⭐️⭐️ 안드로이드 액티비티는 스택에 계속 쌓이기 때문에 각 액티비티의 흐름을 제어해줄 필요가 있다. ⭐️⭐️
-> 이때 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();
}
});
로그아웃을 했을 때는 로그인 창에 아이디/비밀번호가 그대로 남고(?)
(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)
회원탈퇴를 했을 때는 모두 없어지게 했다! 회원탈퇴 - 액티비티가 재시작)
(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)
회원탈퇴를 했을 때는 모두 없어지게 했다! 회원탈퇴 - 액티비티가 재시작)
참고
'Android' 카테고리의 다른 글
안드로이드 매니페스트(Android Mainfest.xml) 개념과 구조 정리 (0) | 2024.01.20 |
---|---|
안드로이드 자바 카카오 로그인 API 예제 구현하기 (1) | 2024.01.19 |
Javax로 Email 보내기 (0) | 2024.01.16 |
SMTP 개념 (0) | 2024.01.13 |
안드로이드 회원가입 이메일 비밀번호 유효성 검사 (0) | 2023.12.27 |