마지막 페이지인 WelcomeActivity에서 e-mail 정보를 받아오는 방법 2번이다.
포인트는 SharedPreferences 클래스를 이용해서 파일을 생성하고 그곳에 데이터를 저장하여,
필요한 곳에서 저장소를 불러와서 데이터를 사용하는 것.
파일은 앱을 삭제하면 사라진다.
MainActivity.java
package com.bpdev.register;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import com.google.android.material.snackbar.Snackbar;
public class MainActivity extends AppCompatActivity {
EditText editEmail;
EditText editPassword1;
EditText editPassword2;
Button btnRegister;
String email;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editEmail = findViewById(R.id.editEmail);
editPassword1 = findViewById(R.id.editPassword1);
editPassword2 = findViewById(R.id.editPassword2);
btnRegister = findViewById(R.id.btnRegister);
btnRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
email = editEmail.getText().toString().trim();
String password1 = editPassword1.getText().toString().trim();
String password2 = editPassword2.getText().toString().trim();
// 비었는지 확인하는 스낵바
if(email.isEmpty() || password1.isEmpty() || password2.isEmpty() ){
Snackbar.make(btnRegister, "필수항목을 모두 입력하세요.", Snackbar.LENGTH_SHORT).show();
return; // 이 if문 조건이 참이어서 스낵바 실행했다면, 동작을 끝내야 한다.
}
// email에 @ 있는지 확인해라
// !내용. 내용이 false라면. ! 는 true/false 뒤집는 기호.
if ( email.contains("@") == false ){
Snackbar.make(btnRegister, "이메일 형식을 확인하세요.", Snackbar.LENGTH_SHORT).show();
return;
}
// 비밀번호 길이 확인 || ~거나
if ( password1.length() < 4 || password1.length() > 12) {
Snackbar.make(btnRegister, "비밀번호 길이를 확인하세요.", Snackbar.LENGTH_SHORT).show();
return;
}
// password1과 password2가 다른 게 true면, if 문을 실행한다.
if( !password1.equals(password2) ){
Snackbar.make(btnRegister, "비밀번호가 서로 다릅니다.", Snackbar.LENGTH_SHORT).show();
return;
}
// 이메일을 저장하자.
// SharedPreference 에 저장 (file save) // 안드로이드가 미리 만들어 놓아서 new 안 해도 됨.
SharedPreferences sp = getSharedPreferences("Register App", MODE_PRIVATE); // getSharedPreferences 이 친구가 저장소임. 여러개 써도 된다.
SharedPreferences.Editor editor = sp.edit();
editor.putString("email", email);
editor.putString("password", password1);
editor.apply();
// 얘들은 파일이니까 언제 어디서나 데려올 수 있다.
// 앱을 기기에서 삭제하면 파일이 사라진다.
// 아바타 선택하는 액티비티를 띄운다.
Intent intent = new Intent(MainActivity.this, AvatarActivity.class);
// // SharedPreference 파일 저장 방식을 사용하니까 필요없음.
// intent.putExtra("email", email);
startActivity(intent);
finish();
}
});
}
}
Register App이라는 저장소를 만들어 정보를 저장해 주었다.
AvatarActivity.java
package com.bpdev.register;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import com.google.android.material.snackbar.Snackbar;
public class AvatarActivity extends AppCompatActivity {
ImageView imgAvatar;
Button btnRabbit;
Button btnTurtle;
Button btnOk;
String email;
boolean isSelected= false; // 이 액티비티가 실행되면 false로 시작함.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_avatar);
email = getIntent().getStringExtra("email");
imgAvatar = findViewById(R.id.imgAvatar);
btnRabbit = findViewById(R.id.btnRabbit);
btnTurtle = findViewById(R.id.btnTurtle);
btnOk = findViewById(R.id.btnOk);
btnRabbit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imgAvatar.setImageResource(R.drawable.rabbit);
isSelected = true;
}
});
btnTurtle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
imgAvatar.setImageResource(R.drawable.turtle);
isSelected = true;
}
});
btnOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if ( !isSelected ){
Snackbar.make(btnOk,"아바타를 꼭 선택하세요.", Snackbar.LENGTH_SHORT).show();
return;
} // 이상조건을 먼저 감지하고 멈춰버리시오.
showAlertDialog();
}
});
}
private void showAlertDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(AvatarActivity.this);
builder.setTitle("회원가입 완료");
builder.setMessage("완료하시겠습니까?");
builder.setCancelable(false);
// Yes 버튼 누르면 동작하라~
builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 새로운 액티비티를 띄운다.
Intent intent = new Intent(AvatarActivity.this, WelcomeActivity.class);
// // SharedPreference 파일 저장 방식을 사용하니까 필요없음.
// intent.putExtra("email", email);
startActivity(intent);
// 그리고 닫는다.
finish();
}
});
builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// todo : 앱 종료
// finish()는 이 액티비티를 종료하는 것
finish();
}
});
builder.show();
}
}
위에서 파일을 만들어 저장했기 때문에 사용하지 않는 곳에서 intent를 통해 email 데이터를 굳이 넘겨받을 이유가 없다.
WelcomeActivity.java
package com.bpdev.register;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;
public class WelcomeActivity extends AppCompatActivity {
TextView txtWelcome;
String email;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
txtWelcome = findViewById(R.id.txtWelcome);
// (intent 방식)
// email = getIntent().getStringExtra("email");
SharedPreferences sp = getSharedPreferences("Register App", MODE_PRIVATE); // 저장소 데려오자.
String email = sp.getString("email", "");
txtWelcome.setText(email+"님\n 회원가입을 축하합니다.");
}
}
intent로 email 데이터를 넘겨받지 않고, Register App 저장소 파일을 불러와서 email 정보를 받으면 된다.
원하는 대로 email 정보가 화면에 출력됨