마지막 페이지인 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 정보가 화면에 출력됨

 

 

 



+ Recent posts