본문 바로가기
개발 공부/안드로이드 스튜디오(코틀린)

안드로이드 스튜디오(로그인페이지/이동)

by momo'sdad 2023. 10. 18.

1. 로그인 페이지/이동

  • Home화면
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/cl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HomeActivity">

    <Button
        android:id="@+id/btnColor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="색상선택"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="64dp"
        android:ems="10"
        android:hint="ID를 입력하세요"
        android:inputType="textPersonName"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etPW"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:hint="PassWord를 입력하세요"
        android:inputType="textPersonName"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="@+id/etID"
        app:layout_constraintStart_toStartOf="@+id/etID"
        app:layout_constraintTop_toBottomOf="@+id/etID" />

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="로그인"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="@+id/etPW"
        app:layout_constraintStart_toStartOf="@+id/etPW"
        app:layout_constraintTop_toBottomOf="@+id/etPW" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

  • Home화면의 ID: - etID: ID 입력창

- etPW: PassWord 입력창

- btnLogin: 로그인 버튼

  • Homeactivity
package com.example.ex2209262;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

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

public class HomeActivity extends AppCompatActivity {
    Button btnColor;
    final int COLOR = 5793;
    ConstraintLayout cl;
    EditText etID, etPW;
    Button btnLogin;
    final int LOGIN = 1020;

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

        btnColor = findViewById(R.id.btnColor);
        cl = findViewById((R.id.cl));
        etID = findViewById(R.id.etID);
        etPW = findViewById(R.id.etPW);
        btnLogin = findViewById(R.id.btnLogin);

        String color = "yellow";
        cl.setBackgroundColor(Color.parseColor(color));

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String login_id = etID.getText().toString();
                String login_pw = etPW.getText().toString();

                // Activity -> Activity로 data 전송
                // Intent 객체 생성
                Intent intent = new Intent(HomeActivity.this, LoginActivity.class);
                intent.putExtra("login_id", login_id);
                intent.putExtra("login_pw", login_pw);
                startActivityForResult(intent, LOGIN);
            }
        });

        btnColor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(HomeActivity.this, ColorActivity.class);
                startActivityForResult(intent, COLOR);
                // HomeActivity를 첫화면으로
            }
        });
    }
    // onCreate() 끝

    // 부모클래스에서 만들어진 기능을 재정의 : Method Overrinding
    // Android에서 오버라이딩 단축키 : Ctrl + o
    // 다른 액티비티를 갔다가 원래 액티비티로 돌아올 때,
    // 호출되는 메소드 중에서 intent값을 꺼낼 수 있는
    // onActivityReault() 메소드를 오버라이닝하자

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 이 메소드가 호출되는 시점!!
        // 다른 액티비티를 갔다가 원래 액티비티로 돌아왔을때 호출됨!!
        if (requestCode == COLOR){
            if (resultCode == RESULT_OK){
                // intent에서 "color" 키 값을 통해 data 꺼내서
                // 배경색깔을 지정!
                String color = data.getStringExtra("color");
                cl.setBackgroundColor(Color.parseColor(color));
            }
        }
        else if (requestCode == LOGIN){
            if (resultCode == RESULT_OK){
                cl.setBackgroundColor(Color.parseColor("red"));
            }
            else if(resultCode == RESULT_CANCELED){
                cl.setBackgroundColor(Color.parseColor("blue"));
            }
        }
    }
}

1) 로그인 버튼(btnLogin)을 눌렀을때

- btnLogin.setOnClickListener(new View.OnClickListener() {})

2) ID와 PW입력창의 Text를 문자열 login_id, login_pw에 저장.

String login_id = etID.getText().toString();

String login_pw = etPW.getText().toString();

// Activity -> Activity로 data 전송

// Intent 객체 생성

3) 문자열로 저장된 ID(login_id), PW( login_pw)를 LoginActivvity으로 보내기!(HomeActivity에서 -> LoginActivity로​)

Intent intent = new Intent(HomeActivity.this, LoginActivity.class);

intent.putExtra("login_id", login_id);

intent.putExtra("login_pw", login_pw);

4) LOGIN를 intent에 받아옴(LOGIN는 상수여야 하므로 변수선언시 상수로 초기화 시켜야함.)

ex)final int LOGIN = 1020;

- Intent intent = new Intent(HomeActivity.this, ColorActivity.class);

startActivityForResult(intent, LOGIN);

5) requestCode가 LOGIN일때,

resultCode가 RESULT_OK이면 로그인이 성공하고 배경색을 red로,

resultCode가 RESULT_CANCELED이면 로그인이 실패하고 배경색을 blue로 바뀌게 된다.

- else if (requestCode == LOGIN){

if (resultCode == RESULT_OK){

// 로그인 성공

cl.setBackgroundColor(Color.parseColor("red"));

}

else if(resultCode == RESULT_CANCELED){

//로그인 실패

cl.setBackgroundColor(Color.parseColor("blue"));

}

  • Loginactivity
package com.example.ex2209262;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class LoginActivity extends AppCompatActivity {

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

        String login_id = getIntent().getStringExtra("login_id");
        String login_pw = getIntent().getStringExtra("login_pw");

        String s_id = "ai";
        String s_pw = "1234";

        if(login_id.equals(s_id) && login_pw.equals(s_pw)){ 
            // 로그인 성공
            setResult(RESULT_OK);
        }
        else{
            // 로그인 실패
            setResult(RESULT_CANCELED);
        }
        finish(); // 현재창 종료
    }
}
  • HomeActivity에서

login_id와 login_pw 정보를 전송

내가 정한 id와 pw내에 있다면

로그인 성공을 return

만약, 없다면

로그인 실패를 return

1) home화면의 ID와 PW Intent가 도착. key를 통해 data들을 꺼내기

String login_id = getIntent().getStringExtra("login_id");

String login_pw = getIntent().getStringExtra("login_pw");

2) ID와 PW지정 해주기

String s_id = "ai";

String s_pw = "1234";

※ Java에서 레퍼런스 타입의 data를 비교하기 위해서는

== 비교연산자 대신에 .equals()를 사용한다

"==": 기본자료형만 사용가능(int, float, string...)/ 레퍼런스 타입은 쓰지않음

3) login_id=s_id, login_pw=s_pw이면

setResult 에 RESULT_OK를 보냄

login_id 와 s_id, login_pw 와 s_pw가 같지 않으면

setResult에 RESULT_CANCELED를 보냄

- if(login_id.equals(s_id) && login_pw.equals(s_pw)){ // login_id == s_id 의 뜻 레퍼런스형이기 때문에 equals함수 사용

// 로그인 성공

setResult(RESULT_OK);

}

else{

// 로그인 실패

setResult(RESULT_CANCELED);

}

4) 현재창 종료(전 화면으로)

finish();

반응형