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

안드로이드 스튜디오(로그인 + 플라스크서버)

by momo'sdad 2023. 10. 18.

● Request 화면 코드 및 화면

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".RequestActivity">

    <EditText
        android:id="@+id/etID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="160dp"
        android:ems="10"
        android:hint="ID를 입력하세요"
        android:inputType="textPersonName"
        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="40dp"
        android:ems="10"
        android:hint="PW를 입력하세요"
        android:inputType="textPersonName"
        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:text="로그인"
        app:layout_constraintEnd_toEndOf="@+id/etPW"
        app:layout_constraintStart_toStartOf="@+id/etPW"
        app:layout_constraintTop_toBottomOf="@+id/etPW" />
</androidx.constraintlayout.widget.ConstraintLayout>

Request화면의 ID: - etID: ID입력창

- etPW: PW 입력창

- btnLogin: 로그인 버튼 -> 눌렀을시 로그인 성공여부 알려줌

※ 네트워크 통신!!! Volley 라이브러리

  • 가장 많이 사용하는 Volley 라이브러리
  • 안드로이드 내장 라이브러리 X
  • 외부 라이브러리!!
  • build.gradle 안에 dependencies에
  • 라이브러리 주소를 추가해도 되고
  • 혹은 직접 검색 후 추가!!
  • File -> Project Structure -> Dependencies -> '+' 누른 후 -> Library dependency

  • Gradle Scripts의 2번째 build gradle에서 -> dependencies의
  • implementation 'com.android.volley:volley:1.2.1' 확인

Request Activity 소스코드

package com.example.ex221004;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.ex221004.databinding.ActivityRequestBinding;

public class RequestActivity extends AppCompatActivity {

    ActivityRequestBinding binding;
    RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityRequestBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // 0. Volley 라이브러리 추가
        // 1. RequestQueue 객체 생성
        if (requestQueue == null){
            requestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        binding.btnLogin.setOnClickListener(v -> {
            // 2. Request 객체 생성
            String login_id = binding.etID.getText().toString();
            String login_pw = binding.etPW.getText().toString();

            String url = "http://192.168.70.91:5022/login";
            url += "?login_id=";
            url += login_id;
            url += "&login_pw=";
            url += login_pw;

            // 2. Request 객체 생성
            StringRequest request = new StringRequest(
                    Request.Method.GET,
                    url,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            // 응답 성공 시
                            Toast.makeText(RequestActivity.this, login_id + "님 환영합니다", Toast.LENGTH_SHORT).show();
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            // 응답 실패 시
                            Toast.makeText(RequestActivity.this, "로그인 실패", Toast.LENGTH_SHORT).show();
                        }
                    }
            );
            // 3. RequestQueue에 Request 추가
            requestQueue.add(request);

        });
        // 4. 응답 결과 확인
    }
}

네트워크 통신 4단계

0. Internet 권한 부여!! (AndroidManifest.xml)

1. Volley 라이브러리 추가

2. RequestQueue 객체 생성

3. Request 객체 생성: StringRequest

4. RequestQueue에 Request추가!!

  • 2. RequestQueue 객체 생성

requestQueue 가 null일때,

if(requestQueue == null){

requestQueue = Volley.newRequestQueue(getApplicationContext()); # 페이지 정보 반환

}

  • binding.btnLogin.setOnClickListener(v -> { # 로그인 버튼 눌렀을때

2. Request 객체 생성

String login_id = binding.etID.getText().toString(); # login_id에 문자열 저장(ID)

String login_pw = binding.etPW.getText().toString(); # login_pw에 문자열 저장(PW)

url += "?login_id="; # http://나의 IP:포트번호/login?login_id=

url += login_id; # http://나의 IP:포트번호/login?login_id=입력받은ID

url += "&login_pw="; # http://나의 IP:포트번호/login?login_id=입력받은ID&login_pw=

url += login_pw; # http://나의 IP:포트번호/login?login_id=입력받은ID&login_pw=입력받은PW

  • 3. Request 객체 생성

StringRequest request = new StringRequest(

Request.Method.GET, # GET or POST 방식 결정

url, # 이동할 url

new Response.Listener<String>() { # 응답 성공했을때

@Override

public void onResponse(String response) {

// 응답 성공 시

Toast.makeText(RequestActivity.this, login_id + "님 환영합니다", Toast.LENGTH_SHORT).show();

}

},

new Response.ErrorListener() { # 응답 실패했을때

@Override

public void onErrorResponse(VolleyError error) {

// 응답 실패 시

Toast.makeText(RequestActivity.this, "로그인 실패", Toast.LENGTH_SHORT).show();

}

}

);

  • 4. RequestQueue에 Request추가!!

requestQueue.add(request);

● 플라스크 서버 코드 (Jupyter Notebook 실행)

from flask import Flask, request
app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello World'

@app.route('/login', methods=['GET', 'POST'])
def login2():
    login_id = request.args['login_id']
    login_pw = request.args['login_pw']
    print(login_id, login_pw)
    return '로그인 페이지'

if __name__ == '__main__':
    app.run(host='192.168.70.91', port=5022)   # 내 IP주소, 포트번호

플라스크 서버 ID, PW 접속 결과 화면

반응형