쨍쨍
#2. AI smart home 본문
[ activity_register ]
<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>
[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가 화면에서 사라질 때 등록된 다이얼로그를 종료하고 관련 자원을 해제
}
}
}
[ 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;
}
}
'프로그래밍 코드 > Android Studio' 카테고리의 다른 글
AI 심리 분석 프로그램 (1) | 2024.07.22 |
---|---|
#3. AI smart home (0) | 2024.03.13 |
#1. AI smart home (0) | 2024.03.13 |
[Android Studio] 클릭 이벤트를 사용하는 4가지 방법 (0) | 2023.05.22 |
[Android Studio] 뷰 바인딩(View Binding) (0) | 2023.05.17 |