본문 바로가기

안드로이드 스튜디오

[안드로이드 스튜디오]SharedPreferences를 활용한 사용자 데이터 저장 및 관리

1. 메인 액티비티 XML: 사용자 등록 화면

1. 메인 액티비티: 사용자 등록 화면

MainActivity.java

사용자 등록 화면에서는 이메일과 비밀번호를 입력받고, 입력된 데이터를 SharedPreferences에 저장한다.

package com.kks.projectdata;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.snackbar.Snackbar;

public class MainActivity extends AppCompatActivity {

    EditText editEmail;
    EditText editPassword;
    EditText editPassword2;
    Button btnRegister;

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

        editEmail = findViewById(R.id.editEmail);
        editPassword = findViewById(R.id.editPassword);
        editPassword2 = findViewById(R.id.editPassword2);
        btnRegister = findViewById(R.id.btnRegister);

        btnRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 1. 입력사항들을 모두 가져온다.
                String email = editEmail.getText().toString().trim();
                String password = editPassword.getText().toString().trim();
                String password2 = editPassword2.getText().toString().trim();

                // 2. 필수항목 체크
                if (email.isEmpty() || password.isEmpty() || password2.isEmpty()) {
                    Snackbar.make(btnRegister, R.string.register_check1, Snackbar.LENGTH_SHORT).show();
                    return;
                }

                // 3. 이메일 형식이 맞는지 체크
                if (!email.contains("@")) {
                    Snackbar.make(btnRegister, R.string.register_check2, Snackbar.LENGTH_SHORT).show();
                    return;
                }

                // 4. 비밀번호 길이 제약 체크
                if (password.length() < 4 || password.length() > 12) {
                    Snackbar.make(btnRegister, R.string.register_check3, Snackbar.LENGTH_SHORT).show();
                    return;
                }

                // 5. 비밀번호가 같은지 확인
                if (!password.equals(password2)) {
                    Snackbar.make(btnRegister, R.string.register_check4, Snackbar.LENGTH_SHORT).show();
                    return;
                }

                // 6. 이메일 주소를 SharedPreferences에 저장
                SharedPreferences sp = getSharedPreferences("avata", MODE_PRIVATE);
                SharedPreferences.Editor editor = sp.edit();
                editor.putString("email", email);
                editor.commit();

                // 7. AvataActivity로 이동
                Intent intent = new Intent(MainActivity.this, AvataActivity.class);
                startActivity(intent);
                finish();
            }
        });
    }
}

주석 설명:

  1. 입력사항들을 가져와 이메일, 비밀번호, 비밀번호 확인을 저장한다.
  2. 필수 항목 체크.
  3. 이메일 형식이 맞는지 체크.
  4. 비밀번호 길이 제약 체크.
  5. 비밀번호가 같은지 확인.
  6. 이메일 주소를 SharedPreferences에 저장.
  7. AvataActivity로 이동.

2. 아바타 선택 화면

AvataActivity.java

사용자가 아바타를 선택하고 선택한 아바타를 저장한다.

package com.kks.projectdata;

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 androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.material.snackbar.Snackbar;

public class AvataActivity extends AppCompatActivity {

    ImageView imgAvata;
    Button btnRabbit;
    Button btnTurtle;
    Button btnOk;

    // 유저가 아바타를 선택하면, 선택한 아바타가 무엇인지 저장하는 용도
    // 0 : 아무것도 선택 안한 것, 1 : 토끼, 2 : 거북이
    int imageType = 0;

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

        imgAvata = findViewById(R.id.imgAvata);
        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 v) {
                imgAvata.setImageResource(R.drawable.rabbit);
                imageType = 1;
            }
        });

        btnTurtle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                imgAvata.setImageResource(R.drawable.turtle);
                imageType = 2;
            }
        });

        btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (imageType == 0) {
                    Snackbar.make(btnOk, "아바타를 선택하세요.", Snackbar.LENGTH_SHORT).show();
                    return;
                }

                // 알러트 다이얼로그를 띄운다.
                showAlertDialog();
            }
        });
    }

    private void showAlertDialog() {
        AlertDialog.Builder builder = new AlertDialog.Builder(AvataActivity.this);
        builder.setCancelable(true);
        builder.setTitle("회원가입 완료");
        builder.setMessage("완료하시겠습니까?");
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(AvataActivity.this, WelcomeActivity.class);
                startActivity(intent);
                finish();
            }
        });
        builder.setNegativeButton("No", null);
        builder.show();
    }
}

주석 설명:

  1. 사용자가 선택한 아바타를 저장.
  2. 토끼 버튼 클릭 시 토끼 아바타 선택.
  3. 거북이 버튼 클릭 시 거북이 아바타 선택.
  4. 확인 버튼 클릭 시 아바타 선택 여부 체크 후 알림 대화상자 표시.
  5. 알림 대화상자에서 'Yes' 선택 시 WelcomeActivity로 이동.

3. 환영 화면

WelcomeActivity.java

 

package com.kks.projectdata;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class WelcomeActivity extends AppCompatActivity {

    TextView txtWelcome;

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

        txtWelcome = findViewById(R.id.txtWelcome);

        // 앱 내 저장소에 저장된 데이터를 가져온다.
        SharedPreferences sp = getSharedPreferences("avata", MODE_PRIVATE);
        String email = sp.getString("email", "");

        txtWelcome.setText(email + "님 환영합니다!");
    }
}

주석 설명:

  1. SharedPreferences에서 저장된 이메일 주소를 가져와 환영 메시지로 표시.