Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

쨍쨍

#2. AI smart home 본문

프로그래밍 코드/Android Studio

#2. AI smart home

이선선 2024. 3. 13. 03:03

[ activity_register ]

회원가입 GUI

 

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:background="@color/Primary">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="회원가입"
                android:textColor="#ffffff"
                android:textSize="30dp"
                android:textStyle="bold"
                android:layout_marginTop="10dp"
                android:layout_marginBottom="10dp"/>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="50dp"
                android:layout_gravity="center">

                <EditText
                    android:id="@+id/idText"
                    android:layout_width="190dp"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginRight="10dp"
                    android:background="@color/Primary"
                    android:drawableStart="@drawable/baseline_person_24"
                    android:drawableLeft="@drawable/baseline_person_24"
                    android:hint="아이디"
                    android:textColor="#ffffff"
                    android:textColorHint="#ffffff" />

                <Button
                    android:layout_width="80dp"
                    android:layout_height="30dp"
                    android:textSize="10dp"
                    android:background="@color/Warning"
                    android:text="중복체크"
                    android:layout_gravity="center"
                    android:id="@+id/validateButton"
                    android:textColor="#ffffff"/>

            </LinearLayout>

            <EditText
                android:id="@+id/passwordText"
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:background="@color/Primary"
                android:drawableStart="@drawable/baseline_https_24"
                android:drawableLeft="@drawable/baseline_https_24"
                android:hint="비밀번호"
                android:inputType="textPassword"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff" />

            <EditText
                android:id="@+id/emailText"
                android:layout_width="280dp"
                android:hint="이메일"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:background="@color/Primary"
                android:drawableStart="@drawable/baseline_mail_outline_24"
                android:drawableLeft="@drawable/baseline_mail_outline_24"
                android:inputType="textPassword"
                android:textColor="#ffffff"
                android:textColorHint="#ffffff" />

            <RadioGroup
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:id="@+id/genderGroup"
                android:layout_gravity="center_horizontal"
                android:orientation="horizontal"
                android:layout_marginTop="10dp">

                <RadioButton
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:text="여성"
                    android:id="@+id/genderWoman"
                    android:layout_weight="1"
                    android:checked="true"/>

                <RadioButton
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:text="남성"
                    android:id="@+id/genderMan"
                    android:layout_weight="1"/>

            </RadioGroup>

            <Spinner		// #1
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:id="@+id/AptSpinner"></Spinner>

            <Button
                android:layout_width="280dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:background="@color/PrimaryDark"
                android:text="가입하기"
                android:textColor="#ffffff"
                android:textSize="20dp"
                android:textStyle="bold"
                android:id="@+id/registerButton"/>


        </LinearLayout>


    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

#1 사용자에게 항목 목록 제공

 

 

 

[RegisterActivity]

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Spinner;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

public class RegisterActivity extends AppCompatActivity {

    private ArrayAdapter adapter;
    private Spinner spinner;

    private String userID;
    private String userPassword;
    private String userGander;
    private String userApt;
    // 사용자 아이디, 비밀번호, 성별, 아파트 정보를 저장할 변수 선언
    
    private AlertDialog dialog;
    // 에러 메세지를 표시하기 위해서 사용
    private boolean validate = false;
    // validate = 아이디 중복 여부를 확인하기 위한 변수
    // 초기에는 중복 여부를 확인하기 전이므로 false로 초기화

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

        spinner = (Spinner) findViewById(R.id.AptSpinner);
        adapter = ArrayAdapter.createFromResource(this, R.array.apt, android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        final EditText idText = (EditText) findViewById(R.id.idText);
        final EditText passwordText = (EditText) findViewById(R.id.passwordText);
        // 아이디와 비밀번호를 입력하는 EditText를 찾음
        

        RadioGroup genderGroup = (RadioGroup) findViewById(R.id.genderGroup);
        // 성별을 선택하는 RadioGroup을 찾음
        int genderGroupID = genderGroup.getCheckedRadioButtonId();
        // 현재 선택된 라디오 버튼의 ID를 가져옴
        String userGender = ((RadioButton) findViewById(genderGroupID)).getText().toString();
	// 선택된 라디오 버튼의 성별을 가져와서 문자열로 저장

        genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
         // 라디오 그룹에서 라디오 버튼의 체크 변화를 감지하는 리스너 설정
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
            // 선택된 라디오 버튼의 ID를 통해 해당 라디오 버튼을 찾고, 성별 정보를 저장
                RadioButton genderButton = (RadioButton) findViewById(i);
                userGander = genderButton.getText().toString();
            }
        });

        final Button validateButton = (Button) findViewById(R.id.validateButton);
        // validateButton 객체를 생성하고, R.layout.activity_register에서 validateButton을 찾아 설정
        validateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String userID= idText.getText().toString();
                // idText에서 텍스트를 가져와 userID 변수에 저장
                
                if(validate)
                {
                    return;
                    // 이미 유효성 검사가 완료되었다면(이미 사용 가능한 아이디라면) 메서드를 종료
                }
                if(userID.equals(""))
                // 만약 userID가 비어 있다면,
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                    dialog = builder.setMessage("아이디는 빈 칸일 수 없습니다.")		// #1
                    // 경고 다이얼로그를 생성하여 사용자에게 "아이디는 빈 칸일 수 없습니다."라는 메시지를 보여줌
                            .setPositiveButton("확인",null)
                            .create();
                    dialog.show();
                            return;
            }
                Response.Listener<String> responseListener = new Response.Listener<String>() { /*연결하는 부분*/
                    @Override
                    public void onResponse(String response) {
                    // 서버에서 응답을 수신하면 호출되는 메서드
                        try
                        {
                            JSONObject jsonObject = new JSONObject(response);
                            // 서버로부터 받은 응답을 JSONObject로 분석
                            boolean success = jsonObject.getBoolean("success");
                            
                            if(success){
                            // 만약 성공적으로 아이디를 사용할 수 있다는 응답이라면
                                AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                dialog = builder.setMessage("사용할 수 있는 아이디 입니다.")
                                        .setPositiveButton("확인",null)
                                        .create();
                                        // 사용 가능한 아이디임을 알리는 다이얼로그를 표시
                                dialog.show();
                                
                                idText.setEnabled(false); /*  아이디를 더 변경할 수 없게 만드는 코드*/
                                validate = true; /*아이디 중복 확인이 완료 됐다는 뜻*/
                                
                                idText.setBackgroundColor(getResources().getColor(R.color.Gray));
                                validateButton.setBackgroundColor(getResources().getColor(R.color.Gray));
                                // 아이디 입력란과 확인 버튼의 배경색을 회색으로 변경
                            }
                            else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                dialog = builder.setMessage("사용할 수 없는 아이디 입니다.")
                                        .setNegativeButton("확인",null)
                                        .create();
                                dialog.show();
                            }
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                    }
                    };
                ValidateRequest validateRequest = new ValidateRequest(userID, responseListener);
                // ValidateRequest 객체를 생성하여 서버에 아이디 중복 검사 요청을 보냄
                RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
                queue.add(validateRequest);
                }
        });
        Button registerButton = (Button) findViewById(R.id.registerButton);
        // 회원 등록 버튼을 눌렀을 때의 클릭 이벤트를 처리하는 부분
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            // 사용자가 입력한 아이디, 비밀번호, 아파트 정보를 가져옴
                String userID = idText.getText().toString();
                String userPassword = passwordText.getText().toString();
                String userApt = spinner.getSelectedItem().toString();

                if(!validate)
                // 중복 확인이 되지 않은 경우 메시지를 표시
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                    dialog = builder.setMessage("먼저 중복 체크를 해주세요.")		// #2
                            .setNegativeButton("확인",null)
                            .create();
                    dialog.show();
                    return;
                }

                if(userID.equals("")||userPassword.equals("")||userApt.equals("")||userGander.equals(""))
                // 필요 정보가 누락된 경우 메세지 표시
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                    dialog = builder.setMessage("빈 칸 없이 입력해주세요.")
                            .setNegativeButton("확인",null)
                            .create();
                    dialog.show();
                    return;
                }
                Response.Listener<String> responseListener = new Response.Listener<String>() {
                // 서버로부터의 응답을 처리하는 리스너를 정의
                    @Override
                    public void onResponse(String response) {
                        try
                        {
                            JSONObject jsonObject = new JSONObject(response);
                            // 서버로부터의 응답을 JSON 객체로 변환 *
                            boolean success = jsonObject.getBoolean("success");
                            if(success){
                            // 응답이 성공적으로 돌아온 경우
                                AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                dialog = builder.setMessage("회원 등록에 성공했습니다.")
                                        .setPositiveButton("확인",null)
                                        .create();
                                        // 회원 등록에 성공했다는 메시지를 표시
                                dialog.show();
                                finish();
                            }
                            else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                dialog = builder.setMessage("회원 등록에 실패했습니다.")
                                        .setNegativeButton("확인",null)
                                        .create();
                                        // 회원 등록에 실패했다는 메시지를 표시
                                dialog.show();
                            }
                        }
                        catch (Exception e)
                        {
                            e.printStackTrace();
                        }
                    }
                };
                RegisterRequest registerRequest = new RegisterRequest(userID, userPassword, userGander, userApt, responseListener);
                // 회원 등록 요청 객체를 생성하고, 서버에 요청을 전송
                RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
                queue.add(registerRequest);
            }
        });
    }

    protected void onStop() {
        super.onStop();
        if(dialog != null)
        {
            dialog.dismiss();
            dialog = null;
            // RegisterActivity가 화면에서 사라질 때 등록된 다이얼로그를 종료하고 관련 자원을 해제
        }
    }
}

 

 

#1. 아이디가 빈칸인 상태에서 중복확인을 눌렀을 때

 

#2. 중복확인을 누르지 않은 채 가입하기를 눌렀을 때

 

[ RegisterRequest ]

이 코드는 안드로이드 애플리케이션에서 서버로 데이터를 전송하는 요청(Request)을 처리하는 클래스입니다. 주로 회원가입과 관련된 기능을 수행합니다.

import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
import java.util.HashMap;
import java.util.Map;

public class RegisterRequest extends StringRequest {
    final static private String URL ="데이터베이스 연결하면 여기에다가 데이터베이스 링크 입력";
    private Map<String, String> parameters;

    public RegisterRequest(String userID, String userPassword, String userGender, String userApt, Response.Listener<String> listener) {
        super(Method.POST, URL, listener, null);
        parameters = new HashMap<>();
        parameters.put("userID", userID);
        parameters.put("userPassword", userPassword);
        parameters.put("userGender", userGender);
        parameters.put("userApt", userApt);
        parameters.put("userEmail", userEmail);
        // 매개변수로 받은 값들을 맵에 추가
    }


    public Map<String, String>getParams(){
        return parameters;
    }
}​

 

 

[ ValidateRequest ]

이 코드는 안드로이드 애플리케이션에서 아이디 중복 확인 요청을 보내기 위한 클래스

import com.android.volley.toolbox.StringRequest;

import java.util.HashMap;
import java.util.Map;
import com.android.volley.Response;

public class ValidateRequest extends StringRequest {
// StringRequest 클래스를 상속받는 ValidateRequest 클래스 선언
    final static private String URL ="데이터베이스 연결하면 여기에다가 데이터베이스 링크 입력";
    private Map<String, String> parameters;
    

    public ValidateRequest(String userID, Response.Listener<String> listener) {
    // ValidateRequest 클래스의 생성자 선언
        super(Method.POST, URL, listener, null);
        // 부모 클래스인 StringRequest의 생성자 호출
        parameters = new HashMap<>();
        parameters.put("userID", userID);
    }

    public Map<String, String>getParams(){
        return parameters;
    }
}