파이썬 비행기 슈팅 게임 만들기 (Creating a Shooting Game with Python) (한글자막)

오늘은 파이썬으로 슈팅 게임 만들기라는 제목으로 강의를 준비했습니다 슈팅 게임이 뭔지부터 살펴보고 그리고 파이썬 설치 pygame 라이브러리 설치 슈팅 게임 만들기 이런 순서대로 진행하도록 하겠습니다

먼저 슈팅 게임이 뭔지 살펴볼텐데 슈팅 게임은 shooting game, STG라는 약칭으로 불리기도 하고 적의 공격을 피하며 무기를 쏘는 게임의 총칭을 의미합니다 슈팅 게임이 구조나 조작이나 간단한 형태라서 게임 역사 초창기부터 존재하였던 장르입니다 중력과 같은 복잡한 물리 엔진이 필요하지 않기 때문에 게임 제작 입문용으로 슈팅 게임이 자주 사용됩니다 파이썬을 전혀 해보지 않았다는 사람들을 위해서 파이썬 설치를 어떻게 하느냐 간략하게 살펴보도록 할께요 먼저 파이썬 홈페이지 사이트를 띄운 다음에 (pythonorg) 다운로드를 누릅니다 윈도우 사용자는 윈도우를 눌러서 윈도우에서 64비트면 64비트를 다운로드하여 설치하면 됩니다 다운로드 후 설치하면 이와 같은 설치 화면이 뜨는데 밑에 path 부분에 체크를 해주신 뒤에 install을 눌러주세요 파이썬 설치가 다 되어있다고 가정하고 pygame 라이브러리를 설치하는 부분을 살펴보도록 할께요

pygame이 뭐냐 pygame은 sdl 라이브러리 위에 구축된 멀티미디어 어플리케이션을 만들기 위해서 제공되는 오픈 소스 파이썬 프로그래밍 라이브러리입니다 pygame 로고도 귀엽게 만들어져 있습니다 다양한 pygame에 feature들도 있습니다 pygame 설치는 어떻게 하느냐 시작 – 실행 – command 창 열고 pip install pygame 명령을 수행합니다 이제 이 화면처럼 설치되는 과정을 거치면 되겠습니다 pygame이 설치가 잘 되었는지 확인을 해야 합니다 그래서 pygame을 실행 해 볼게요 idle python을 실행해서 import pygame을 쳐주면 pygame 194가 잘 설치되었다는 메시지를 볼 수 있습니다 이제 게임을 만들텐데 슈팅 게임 만들기 바로 이런 게임을 만들겁니다 게임이 재미있게 보이죠 소리도 들어가고 이게 최종 완성된 게임입니다 이 게임의 컨셉은 지구를 지켜라 밑에 배경 그림에 지구가 있죠 운석이 지구를 향해 떨어지는데 그 운석을 미사일을 쏴서 없애는 게임입니다

게임을 만들려면 굉장히 많은 리소스들이 필요합니다 예를 들어 배경화면, 폭발되는 그림, 미사일, 각종 폰트들 그리고 다양한 운석 그림이 필요합니다 근데 이걸 어떻게 준비하느냐 여러분들이 직접 찾아서 원하는 이미지들로 바꾸실 수도 있지만 강의 진행상 제가 일일히 정리해서 홈페이지에 올려놨습니다 suanlabcom 홈페이지에 들어가서 특강에 게임 리소스 버튼이 있습니다 youtube 설명 칸에도 링크가 있습니다 다운로드 한 파일을 압축을 풀어봅니다 압축된 폴더 안에 모든 리소스들이 들어가 있습니다 이제 게임에 필요한 여러 준비들이 끝났습니다 그 다음에 게임 화면을 처음에 구성해야 되는데 실제적인 게임을 만드는 코딩이 들어갑니다 여러분들과 함께 코딩을 할텐데요 새로운 코딩을 할 문서가 필요하기 때문에 file – new file을 클릭하여 새 문서를 띄웁니다 이제 이 파일에서 우리가 코딩을 작성할텐데 먼저 저장을 좀 해야겠죠 경로상 우리가 압축을 풀었던 pyshooting 폴더 안에 pyshootingpy 라는 이름으로 저장을 해볼게요 이제 우리가 게임 코드를 작성 해 보도록 하겠습니다 파이게임 라이브러리를 로드하고요 그 다음에 system 라이브러리, 게임은 시간과 관련 된 것이 있어야겠죠 그래서 세가지를 일단 먼저 로드해줍니다 그 다음에 게임 처음 화면을 블랙으로 하기 위해 RGB를 0으로 설정합니다 게임 화면 크기는 여러분들이 원하시는 크기로 설정하시면 됩니다 저는 480에 640으로 하겠습니다 그 다음에 게임 초기화를 위한 함수 ‘initGame’이 필요합니다 그 다음에 global 변수로 gamePad와 clock을 가져옵니다 pygame이라는 라이브러리를 또 초기화시켜 줍니다 gamepad를 구성하는데 패드는 paygame

Displayset 게임 전체 우리가 아까 정의했던 크기를 정의 해줍니다 그리고 ptgame의 캡션 즉, 게임의 이름을 파이슈팅이라고 지었는데 이 이름을 제목으로 띄워주는 부분을 말합니다 그 다음에 clock을 걸어줍니다 그 다음에 실질적으로 게임이 실행될 수 있는 함수인 rungame을 넣어줍니다 그 다음에 ongame을 false로 둡니다 각종 이벤트를 처리하기 위해서 while을 돌린 다음 event를 넣어줍니다 게임을 처음 할 때에는 이벤트가 없고 게임을 종료시키는 이벤트만 설정해둡니다 창을 닫거나 하면 파이게임 종료시키고 시스템 종료시키는 이벤트를 처리해 줍니다 그 다음은 화면을 검은 색으로 채우는 fill을 설정합니다 그 다음에 파이게임의 디스플레이를 업데이트 합니다 Clock tick을 60으로 한다는 것이 무슨 말이냐 하면 초당 프레임 수를 60으로 설정하여 게임 플레이가 초당 60으로 진행이 됩니다 그 다음 이 두개의 함수를 실행시키기 위해 Initgame과 rungame을 실행시켜 줍니다 F5를 눌러서 실제 동작을 시켜보겠습니다 이렇게 화면이 구성이 됐습니다 그 다음은 배경그림넣기 배경 그림을 그리기 위해서 이 객체를 그리는 drawobject라는 함수를 정의해 놓습니다 gamepad를 global로 가져옵니다 blit란 비티 현상과 관련해서 해당하는 오브젝트를 x,y좌표 위치로부터 그려라라는 의미가 되겠습니다 그리고 background를 가져옵니다 Background= pygame,image,load 에서 png파일로 정의해 둔 걸 가져옵니다 로드했고, 그리는 함수 만들었고, 그 다음 이제 그려야죠 그리는데 아까 블랙으로 색깔 지정한 걸 뺄게요 왜냐면 게임하면 블랙으로 안 칠해도 배경화면을 꽉 채우기 때문에 Drawobject로 background 0,0 이렇게 그려주겠습니다 확인 보시면 background가 정의되지 않았다 이걸 보시면 backround 정엽변수를 안 불러왔습니다 지구가 있고 우주가 있는 그런 배경화면이 넣어졌습니다 배경 그림과 함께 실제 전투기가 있어야겠죠 그래서 전투기를 넣어줍니다 fighter 넣어주고요 Fighter에 이미지를 로드해줍니다 전투기를 어느 위치에 할지 초기화가 필요합니다 이미지 사이즈를 가져온 뒤 전투기의 실제적인 폭과 너비로 지정을 해줍니다 그 다음에 전투기가 게임에 나타나야 하는데 처음에 어디에 나타나야 할지 전투기 초기 위치로 xy좌표로 잡아줍니다 폭에서 045 위치, 그리고 높이에서 09 위치 즉 밑에 부분, 중간에 위치하게 되겠죠 그리고 전투기로 화면을 그려줘야겠죠 배경화면 그린 다음에 drawobject로 전투기를 화면에 그려줍니다 중앙 쯤에 위치하도록 이렇게 비행기를 넣었습니다 그 다음은 전투기의 움직이는 부분을 설정해 줍니다 이 이벤트 처리 부분에 전투기를 움직일 수 있는 키보드 이벤트도 한 번 받아보도록 할게요 Event Type in pygame

keydown 키가 눌리면 이 이벤트로 들어옵니다 그런데 키가 무슨 키가 눌러있는지 또 한 번 체크해주어야겠죠 Event Key=pygamek_left 왼쪽으로 다섯칸 -5를 해주어서 왼쪽으로 움직이라는 의미입니다 오른쪽도 설정해줍니다 Fighterx를 +5로 설정하여 오른쪽으로 움직이도록 해줍니다 Left, right 키 눌렀을 때 움직이는 부분을 해주었습니다 Keydown은 키가 눌렀을 때, keyup은 키를 뗄 때 입니다 keyup이벤트가 들어오면 비행기가 멈춰야 겠죠 두 개가 들어오더라도 비행기 현재 좌표를 0으로 설정하여 손을 떼면 정지하도록 해줍니다 그 다음에 전투기 위치가 키보드 조작에 따라서 바뀌도록 재 조정해주어야 겠죠 실제 x위치에 다가 fighterx라는 즉 키보드로부터 변경된 위치를 x좌표 위치로 발현을 시켜줍니다 그 다음에 x가 0보다 작을 경우란 게임 왼쪽으로 끝까지 가는 경우 비행기가 움직이지 않게 하기 위해 음수가 될 경우에는 0으로 게임 밖으로 빠져 나올 수 없게 최대 왼쪽으로 갈 수 있는 부분을 고정해주는 겁니다 마찬가지로 게임 화면에 끝까지 오른쪽으로 갔을 때 비행기 전체 width값에 pad에서 width값을 뺀 나머지 값은 x위치로 즉 더 이상 오른 쪽으로 못가게 막아줍니다 이렇게 움직이는 것 까지 했습니다 그 다음에 비행기가 미사일을 발사해야겠죠 미사일을 발사하기 위해서 미사일 그림을 좀 가져올게요 미사일 그림을 가져 왔습니다 그 다음에 global 변수로 미사일을 선언합니다 그 다음에 무기 좌표 리스트 missileXY를 리스트 형태로 미사일 하나만 발하는게 아니잖아요 여러 개니까 여러 개 위치를 가지고 올 변수가 필요합니다 미사일을 스페이스키로 발사하기 위한 설정을 해줍니다 미사일 현재 위치를, fighter의 width를 2로 나눕니다 즉 미사일을 현재에 비행기의 중간에서 나가게끔 x좌표를 잡아주고요 y는 전체 y좌표에서 비행기 크기 만큼 빼주면 되겠죠 그러면 미사일이 전투기의 앞부분 중간에 발사되게끔 설정이 됩니다 그 다음에 만들었던 missileXY 리스트 변수에다가 missileX, missileY 좌표값을 그대로 저장해 줍니다 여러개가 나가야 되기 때문에 저장 해 줍니다 이렇게 미사일 여러 개가 발사되야 되겠죠 미사일을 발사한다라는 건 어디에 있어야 되느냐 비행기 그리고 나서 length를 구합니다 즉 0이 아니면 (1개 이상이면) 여러 조건에 따라서 미사일을 그립니다 Enumerate로 미사일 xy에 따라서 전체적으로 돌고 그 다음에 i와 bxy가 첫번째 부분에 -10을 해줍니다 미사일이 위로 발사 되므로 y좌표로 치자면 -10씩 미사일이 빠르게 이동하는 형태로 만들어 줍니다 그 다음 미사일 여러 개니까 bxy부분에 대한 값을 넣어줍니다 즉 -10 만큼 이동된 값이 미사일xy라는 리스값으로 바뀌어야합니다 미사일 xy값이 현재 -10만큼 이동된 값으로 바뀌어야 되기 때문이 이런 식으러 넣어줍니다 그 다음에 0보다 작거나 같을 때, 즉 미사일이 화면 밖으로 넘어갔을 때 화면 밖으로 넘어가면 미사일 리스트에서 제거해주어야 합니다 미사일이 실제 0이 아니면 다시 한번 미사일을 다시 한 번 그려줍니다 그 다음에 미사일을 발사해야 하는데 없앨 운석을 떨어뜨리겠습니다 운석을 그냥 떨구면 재미없으니 랜덤으로 30개나 준비했습니다 운석 30개를 random으로 가져옵니다 운석을 하나만 해도 되는 데 단순하게 하나만 있으면 게임 전체의 다이나믹스가 감소되겠죠 30개 부분을 이렇게 정의했습니다 운석이 랜덤하게 생성될 수 있도록 설정해줍니다 결국 불러오는 시점에서 랜덤으로 고르면 되기 때문에 아까 우리가 정했던 30개 중에서 1개를 랜덤하게 고릅니다 그런데 운석의 크기가 다르기 때문에 가져온 그림의 실제 크기를 가지고 폭과 너비를 가져옵니다 게임의 다이나믹스를 위하여 운석의 초기 위치도 랜덤하게 설정해 줍니다 그래서 운석의 x위치를 바꾸어 줍니다 Rockspeed 즉 운석이 떨어지는 속도인데 이건 초기값을 2로 지정을 해볼게요 운석이 실제 미사일이 발사되고 화면이 업데이트 되기 이전에 rockY, 운석은 y좌표로 움직이니까 그래서 rockspeed 2로 적용했던 부분을 rockY도 적용시켜 줍니다 그리고 운석이 지구로 떨어졌어요 pad의 전체 크기보다 rockY좌표로 넘어 섰을 경우 운석이 화면밖으로 지나갔기 때문에 새로운 운석을 만들어주어야 합니다 copy 후 추가 그러면 운석을 새로 고르게 됩니다 그리고 운석을 실제로 그리기 위해 rockX좌표, rockY좌표를 설정합니다 운석이 파괴되도록 만들어 보겠습니다 파괴되는 데 운석이 그냥 사라지게 할 수도 있겠지만 그럼 재미가 없으므로 폭파되는 이미지를 가져옵니다 그래서 explsion 이미지 파일을 가져와요 그리고 실제 전투기 미사일에 운석이 맞았을 때 부분을 처리하겠습니다 맞았을 때 (isShot) 갯수를 세 줄게요(shotCount) 그 다음 운석을 놓쳤을 때 정보도 입력하겠습니다 global변수로 explosion을 둘 다 넣어줍니다 그 다음에 미사일이 운석을 맞췄어요 그럼 이제 미사일을 발사 그리는 부분에서 미사일이 운석을 맞췄을 때를 처리해주어야 합니다 만약에 bxy[1]에 0번 째가 rockX 즉 운석 위치, 돌의 부분에 겹치냐 안겹치냐를 확인하는 부분입니다 미사일이 운석의 범위 안에 들어가면 기존 미사일을 제거해주어야 겠죠 미사일이 운석을 맞추었으니까 isShot을 True로 바꾸어 줍니다 그 다음에 맞았으니까 shotCount를 1더해줍니다 운석을 실제 그리기 이전에 만약에 isShot을 플래그로 뒀던게 True로 바뀌면 즉 맞췄을 경우에는 폭파해야 하니까 explosion으로 넣던 운석이 폭파되는 그림을 띄웁니다 그리고 폭파 시켰으니까 새로운 운석을 그립니다 그리고 isShot은 True에서 False로 바꾸어 줍니다 운석이 파괴되는 것까지 추가했습니다 그 다음에는 파괴한 운석수랑 놓친 운석수, 게임 스코어 정보가 있어야 합니다 카운터 정보를 받으면 나눔고딕으로, 사이즈 20으로 표현해보겠습니다 Rendering 하고 ’파괴한 운석 수’ 를 적어 줍니다 그 다음에 카운트로 온 운석수를 str으로 변환해줍니다 파괴한 운석수 색깔을 흰색으로 할게요 (RGB모두 255, 흰색) 위치는 10,0 왼쪽 위에 둘게요 그리고 운석을 놓친 수도 비슷하니까 복사해줄게요 (writeScore를 writePass로 바꿔주기) 위치를 오른쪽 위에 띄우고 빨간색으로 강조할게요 (RGB중 R을 255로) 실제 미사일이 운석을 맞추었을 때 스코어를 증가시켜주어야 되기 때문에 shotCount라는 변수를 반영하고 그 밑부분에 실제 운석을 맞춘 점수가 표시되게끔 shouCount를 설정 해 줍니다 그 다음 운석이 지구로 떨어진 경우 padHeight보다 운석y좌표가 넘어갔을 때 rockPassed를 1로 증가시켜 줄게요 놓친 경우도 마찬가지로 화면에 출력해줍니다 writePassed에 ‘놓친 운석 수 표시’로 이름을 바꾸어 줍니다 그 다음에 운석을 맞추면 속도를 증가시켜봅시다 isShot 부분에 맞추면 rockSpeed에 숫자를 넣습니다 02

씩 증가하는데 10보다 빠르면 게임 거의 불가능하기때문에 10으로 그냥 맞춰줍니다 조금씩 빨라지는 것이 느껴지시나요? 맞출수록 운석 내려오는 속도가 빨라지고 있어요 전투기가 운석과 충돌하거나 운석을 놓혀 게임오버가 되면 게임을 정지하고 다시 하는 부분을 추가해보도록 하겠습니다 게임에 메시지를 출력해야 하기 때문에 메시지 함수를 통해서 실행시킵니다 TextFont = pygameFontFont 게임 메시지는 60정도로 좀 크게 출력할게요 Textfont Render에서 색깔은 레드 (RGB 255, 0,0) 텍스트의 포지션은 Length에서 실제 포지션을 정해줍니다 TextPosCenter 정중앙에 출력한다는 의미입니다 이것은 실제적인 화면에 텍스트를 출력하는 부분이고 게임의 디스플레이를 업데이트 해줍니다 이건 뒷부분인데 미리 Sleep만 걸어 줄게요 우리는 동전이 무제한이에요 그래서 게임이 다시 한번 또 실행이 됩니다 ‘Sleep 2초 쉬고 게임 다시 실행해줘’ 이거에요 그 다음에 crash되는 부분 즉 충돌났을 때 아까 우리가 정의했던 메시지 함수에다가 전투기가 파괴됐다 라는 부분을 호출해줍니다 그 다음 게임오버된 부분 게임오버 되면 '게임오버가 됐다'를 띄워줍니다 실제 운석이 충돌되는 지에 대한 이벤트를 넣어줍니다 전투기가 위치가 바뀌는 부분을 읽고 위치가 바뀌어서 실제 다음 전투기를 그리기 이전에 전체 rock의 좌표와 Y라 보면 안되겠죠 X도 마찬가지로 그려줍니다 충돌하는 부분을 체크하는 겁니다 그래서 y, x좌표를 보고 실제 운석이랑 비행기의 어떤 부분이랑 겹치는지 안겹치는 지를 체크해서 만약 겹치면 충돌이 났다라고 띄워줍니다 그 다음은 운석을 계속 놓칠 경우 설정합니다 만약에 놓친 것이 3개면 게임오버가 되는 설정입니다 오타를 잘 체크해봅시다 🙂 위치도 잘 체크해 봅시다 🙂 게임오버를 확인해 봅니다 게임의 각종 소리를 넣어 보겠습니다 미사일이랑 global 변수랑 게임오버되는 오버사운드 2가지를 미사일 사운드, 게임오버 사운드 두개를 global 변수로 추가해 줍니다 그 다음 pygame

MixerMusicLoad 에서 실제 음악파일들을 받을 건데 Musicwav 파일은 제가 배경음악으로 준비를 했습니다 게임 배경음악인데요 유튜브 오디오 라이브러리에서 아주 좋은 걸로 찾아놨습니다 그 다음에 미사일이 발사할 때도 사운드를 발생해주어야 되기 때문에 Missile

wav파일 그 다음에 게임 오버 사운드 이렇게 load하는 부분이 끝났습니다 그 다음에 각각에 게임 중에 미사일이 발사되죠 스페이스 누르면 미사일 사운드를 플레이 시켜줍니다 그 다음에 게임 메시지 출력할 때 게임 오버 사운드를 씁니다 여러분 메시지 출력할 때 무엇을 해주어야 하냐면 배경음악이 재생되고 있을 거 아니예요 그 배경음악을 잠깐 멈추어 주어야 해요 그 다음에 게임 오버 사운드를 플레이 시켜줍니다 Sleep 2해주고 그 다음 배경음악을 다시 플레이 시켜주어야 합니다 그 다음에 운석을 만들어주는 부분 처음에 운석 만들어주는 부분에 운석이 새롭게 생성되는 동시에 사운드도 랜덤으로 고를 수 있게 설정해둡니다 DestroySound로 4개중에 하나를 고를 수 있게 해주고요 그리고 운석이 파괴되는 건 실제 맞추었을 때 IsShot, 맞추었을 때 파괴되는 폭발 그림 그려주고 여기에 Destroy 사운드를 재생해줍니다 파괴되고 새로운 운석 만들면서 이때 destroy 사운드를 랜덤하게 골라 주는 부분을 추가해 줍니다 이렇게 게임 동작을 하는지 확인해볼까요 소리 잘 나죠 배경음악도 나오고 미사일 쏘는 소리 그리고 파괴되는 소리도 나옵니다 이렇게 해서 지구를 지켜라라는 파이슈팅게임 완성이 됐습니다 완성! 여러분들이 게임을 가지고 다양한 변형으로 새로운 게임을 만들 수 있습니다 이미지를 바꿀 수 있고, 소리를 바꿀 수 있고 게임을 좀 더 다양한 장르로 여러분들이 원하는 게임을 쉽게 만들 수 있겠죠 이렇게 게임을 만드는 과정까지 살펴보았고요 다음에 또 좋고 유익한 강의로 찾아 뵙도록 하겠습니다 지금까지 이수안컴퓨터 연구소였습니다 감사합니다

Android Browser – WebView – Complete Tutorial Series Part 1 – Creating WebView Layout & Back Button

안녕하세요,이 새로운 안드로이드 스튜디오 튜토리얼에 오신 것을 환영합니다 이 비디오에서 오늘 저는 여러분에게 빠르게 보여줄 것입니다

당신이 볼 수있는 안드로이드 브라우저는 위에서 호출 한 샘플 앱입니다 당신은 마스터하고 앱 내부에서 볼 수 있듯이 진행률 표시 줄과 옆에 있습니다 우리는 이미지보기를 가지고 있으며 상단에는 webview 내부에서 열려있는 페이지에 따라 제목을 업데이트하십시오 실제로이 영역과 제목 옆에 볼 수있는 것처럼 뒤로 버튼이 있습니다 우리는 또한 앞으로 단추가 있고 우리는 몇 가지 메뉴를 가지고 있으므로 지금 우리는 내가 검색 할 Google 홈 페이지가 있고 내가 아는 사람입니다

단순히 내 이름 자체를 검색하므로 speakeasy를 선택하면됩니다 이제 진행 막대가 0에서 100으로 이동하는 것을 볼 수 있습니다 또한이 이미지 뷰는이 로고 인 Google favicon으로 업데이트되며 우리도 우리가 볼 수있는 작업 표시 줄은 우리가 어떻게 webview 제목으로 업데이 트됩니다 뒤로 버튼 우리는 앞으로 버튼을 가지고 있고 앞으로 알 수 있듯이 버튼이 작동하지 않습니다 최상위 페이지에 있기 때문에 앞으로 버튼을 클릭하면 볼 수있는 것이 아무것도 없습니다 메시지를 누른 다음 난 그냥 돌아가서 지금이 지점에서 볼 수있는 돌아 가기 우리는 앞으로 나아갈 수 있습니다

그래서 완벽하게 작동합니다 그래서 우리는 이것과 같은 안드로이드 애플 리케이션과 지금 당신이 볼 수있는 팝업 메시지가 있습니다 대화이며 앱을 종료하고 싶거나 계속하고 싶다고 말합니다 앱을 사용하면 숙박 할 때 클릭하면 앱 안에있게됩니다 그 자체로 그렇지 않으면 당신이 단지 나에게 그 다음 나갈 것 인 출구를 클릭하면 그것은 갈 것이다 앱을 닫으면 우리의 아이디어가됩니다 강한 안드로이드 뒤로 버튼 인 뒤로 버튼은 작동하지 않습니다

앱을 초과하여이 버튼으로 작동 할 수도 있으므로 두 번째에 있습니다 뒤로 버튼을 클릭하면 이전 페이지로 이동하고 한 번 이동합니다 다시 버튼을 누르면 팝업이 나타납니다 이 동영상에서 우리는 단지 만들려고하는 메시지입니다 이렇게 더 이상 안드로이드 없이는 안드로이드 응용 프로그램을 시작하자

안드로이드 스튜디오로가는 것 또한 방금 시작한 샘플 프로젝트가있다 지금은 슈퍼 브라우저 프로라고 불리는이 시점에서 저는 실제로 내 안드로이드 스튜디오에서 드라큘라 배경을 사용하여 테마를 삭제하십시오 왜냐하면 저는 여러분들을 위해 훨씬 더 명확하게하고 싶습니다 그래서 저는 이제 삭제 된 테마로 전환하여 번호판을 클릭하면 시간을 혁신적으로 바꿉니다 지금 우리는 필요한 오래된 안드로이드 스튜디오를 보유하고 있습니다

해야할 일은 우리가 먼저 가지고있는 레이아웃입니다 그냥 텍스트로가는 우리는 실제로 제한된 레이아웃을 가지고 있습니다 Android 스튜디오 프로젝트에서 촬영할 때의 기본 레이아웃 선형 레이아웃으로 변경하여 선형 레이아웃으로 변경하고 유지하십시오 레이어를 선형 레이어로 변경하거나 당신은 새로운 레이아웃을 추가하고 있습니다 선형 레이어 내부에 여러 항목을 추가하면 선형 레이어 내부의 속성으로 방향을 지정하므로 오리엔테이션에 참여하고 싶기 때문에이 경우 정치적으로 만들고 싶습니다

하나씩 항목을 표시하므로 세로로 추가하면됩니다 textview 우리가 필요로하는 앱은 진행 막대가 있고 그 옆에있는 앱과 같습니다 이미지보기가있어서 다른 선형 레이아웃을 만들고 선형 레이아웃 일치하는 부모 및 높이 약 30 DP 수 있으므로 모든 Android 앱의 디자인을 좋아해서 실제로이 튜토리얼을 작성하고 있습니다 그리고 그 목적을 위해 나는 단지 당신에게 샘플 레이어를 알고 사용하고있다 어떤 종류의 좋은 생각이라도 당신은 당신의 아이디어와 함께 갈 수 있습니다

그래서 나는 당신이 알고 싶어합니다 이걸 부모님 둘다에 넣으세요 그 후에 네가 좋아하는 것 같아 방금 추가 했어 왜냐하면 우리는 수평을 필요로하기 때문에이 침대 기본 위젯을 실제로 사용하고 있습니다

컴팩트 한 다음 진행 표시 줄 가로로 그리고 거기에 우리가 근처에 충돌 펼치기 뷰 및 일치하는 부모의 이미지 뷰를 볼 수 있습니다 오리엔테이션을 추가해야하므로 우리가해야 할 일이 위젯이 필요하기 때문에이 경우 가로 방향으로 추가하면됩니다 하나는 다른 레이아웃을 사용하므로 선형 레이아웃을 사용하면됩니다 무게를 더하는 시설을 갖춰 계층화 된 무게와 내가 사용하기를 원한다 이 경우에는 0

1로, 이미지보기에서는 09로 전환하고 싶습니다 보시다시피, 우리는 이와 같은 견해를 가지며, 그것은 다른 부분으로 나뉘어져 있습니다 우리가 두 가지 경우 모두에서 제시 한 방식대로, 나는 이제 막 갈거야 앱 아이콘 인 실행기가 될 수 있도록 샘플 이미지를 추가하십시오

이제 우리는 그것을 가지고 있습니다 그래서 다음 단계는이 선형 층 외부와 main linear layer 저는 부모가되는 웹 뷰를 만들려고합니다 이 태그가 필요 없기 때문에 여기서 태그를 닫을뿐입니다 마지막으로 내 웹보기에서 각 항목의 ID를 추가하면이 이미지보기는 ID가 될 수 있습니다 내 이미지보기 및이 경우에는 내 진행 상황으로 추가하고 싶지만 이제는 그것을 가지고 다음 것은 우리가이 모든 아이템들을 안에 선언해야한다는 것입니다

이 oncreate 메소드 밖에 추가 할 주요 활동 먼저 진행률 표시 줄이 있으며, 샘플을 제공하는 것을 알고 있습니다 이름 슈퍼 진행률 표시 줄 이제 우리는이 세 가지를 내부에 선언해야합니다 그 하나는 메소드를 생성합니다 그래서 우리는 먼저 슈퍼와 다음 진행 막대를가집니다 ID 순서 ID로 뷰를 찾으면 내 진행 표시 줄에 점을 찍으므로 건너 뛸 것입니다

이 부분은 이제 괜찮습니다 하나의 아이템 안에있는 아이템은 마지막으로 내가해야 할 일은 최종 아니지만 다음 지점에서 진행률 표시 줄을 추가하는 방법 그래서 진행 그렇다면 우리는 최대 값을 100으로 설정할 필요가 있습니다 0에서 시작하여 100 % 일 이내에 끝나기 때문에 우리가 필요로하는 것 다음으로 해야 할 일은 책보기가있는 이미지보기를 사용하므로 다음 단계는 우리는 웹보기를 추가하는 방법을 만들어야합니다 그래서 처음에는로드 된 URL을 제 경우에 추가해야합니다 당신이 HTTP를 알고있는 것처럼 그것을주고 다음 www

googlecom 종류의 지금은 괜찮아 googlecom이므로 앱이 시작될 때로드 될 것입니다 구글 com 그래서 그 후에 우리는 책을 추가해야합니다

그러면 JavaScript가 활성화되도록해야합니다 이번에는 설정을 누른 다음 사과 세트 자바 스크립트를 설정하면 사실 사과 JavaScript는 webview 내부에 추가해야 할 일입니다 요즘 화가의 대부분은 일부를로드하는 자바 스크립트를 사용하기 때문에 아이템과 위젯의 종류에 따라 달라 지므로 우리의 견해는 그것들을로드 할 수 있어야합니다 응축 때문에 우리는 자바 스크립트를 다음에 사용할 수있게 설정해야합니다 우리가 웹 뷰를 사용하는 경우에 가장 많이 그리고 전체적으로 이것을 리뷰하십시오

클라이언트와이 경우에 우리는 당신의 클라이언트와 같은 말로 Bob을 사용할 것입니다 우리는 또한이 웹 크롬 클라이언트를 사용할 예정이므로 먼저 소개하는 것을 도울 수있는 정말 좋은 방법 인 크롬 클라이언트를 사용하십시오 다른 기능을로드하여 크롬 고객이 지금은 발음하기 어렵습니다 이 둘 사이를 열면이 두 괄호 사이에서 이걸 볼 수 있다는 것을 알게됩니다 중괄호를 추가 할 것입니다

그래서 지금과 같은 것입니다 Ctrl 키를 누르거나 키보드에서 누르기 만하면됩니다 이 때와 내가 컨트롤을 누르거나 내 화면과 창에 작은 팝업 창이 어떻게 표시되는지 확인할 수 있습니다 받은 제목에 하나의 진보 체인저가 필요한 세 가지 방법과 하나의 수신기 아이콘과 이러한 방법을 볼 수없는 경우에 대비하여 단순히 키보드에서 검색하기 만하면됩니다 그런 것들이 그렇게되면 한 번 당신이 내 시험에 가고 나서 당신이해야 할 일 키보드의 컨트롤을 누른 상태에서 컨트롤을 선택하면 3 개가되고 이제는 컨트롤을 선택하면 3 개를 클릭하기 만하면됩니다

괜찮아요 이제 웹에있는 세 가지 방법을 가져올 것입니다 클라이언트 웹 크롬 클라인 당신이 볼 수있는 것처럼 지금 우리는 3 가지 방법 중 하나가 있다는 것을 의미합니다 책을 보거나 보았던 프로그 레저 체인저는 다음으로 새로운 것이 있습니다 진도가 정수이므로 우리가해야 할 일은 우리가 클라이언트로부터의이 웹의 진도 그래서 오늘 우리는 진행 표시 줄로 진행하면 슈퍼 진행률 표시 줄이 나타납니다

이 단계에서 진행 상황을 설정하면 변수 이름 인 새로운 진행 상황이 표시됩니다 그 타입에 있고 그것이 바로 다음에 우리가 갈 문자열 제목을 가지고 있습니다 작업 표시 줄의 제목이되어야합니다 지원 작업 표시 줄을 클릭 한 다음 제목을 설정하십시오이 경우에는 이제 문자열을 직접 추가 할 수 있습니다

자막이므로 마침내 우리는 내가 원하는 비트 맵은 내가 원하는 웹 사이트 또는 웹 페이지의 favicon입니다 내 이미지보기로 들어가서 수퍼 이미지보기가 있고 이미지 비트 맵을 설정합니다 그리고 그것은 하나의 수신기의이 변수 이름 인 아이콘이 될 것입니다 지금 우리는 모든 일이 끝났고 그 다음 일은 우리가 가지고있는 것입니다 매니 페스트에 가서 인터넷 사용 허가를 받기 위해서 인터넷이 될 수 있고 좋아 이제 우리는 허가와 마지막 것은 우리가 몇 가지를 추가해야한다는 것입니다 당신이 알고 있기 전에 또 다시 그런 종류의 앱을 실행하려고합니다

나는 우리가 단 하나도 추가하지 않았기 때문에 그것이 실행되지 않을 것이라고 확신한다 우리는이 코드에서 한 줄 더 뽑아 냈습니다 webview 내부에서 웹 페이지를 실행하는 데 중요합니다 시작하겠습니다 URL을 열 것입니다

내 기본 브라우저에서 기본 브라우저를 사용하면 구글 크롬 그래서 구글 크롬이 무엇이며 이것이 내가 무엇입니까 기본 브라우저로 말했고 앱을 연 후에도 내가있을 것입니다 앱이 시작될 이유를 설명 할 것입니다 내부에서 적어도 Chrome 브라우저 내부에서 시작할 것입니다 안드로이드 응용 프로그램 대신이 대신에 몇 가지 기다려 보자

몇 초 만에이 일을 끝내면 지금은 완성 된 과정이 완성됩니다 그것이 곧 시작될 것이라고 기대하면서 이제는 괜찮습니다 서사시적인 게임이므로 기다리 자 이제 열리고, 로더와 그것이 실제로 크롬 브라우저 내부에서 열리는 것을 비난해라 이제는 시간이다

이 오류를 수정하면 가장 먼저 할 수있는 것처럼 우리가 지금 돌아갈 수 있습니다 지금 우리가 방금 웹 크롬 고객 문제를 추가 한 것을 보아라 그러나 우리는 하나를 추가하는 것을 잊었다 그때 webview 다음 webview 클라이언트 및 새로운 webview 말했다 슈퍼 일이 클라이언트 그래서 당신이 그것을 나타내는 경우 그것을 나타내는이 줄을 추가 할 때 이 메서드를 사용하는 동안 W 자체에서 해당 URL을 열 수있는 권한 다음은 웹보기에서 많은 기능을 사용할 수 있도록 설정 한 것입니다 지금 우리가 앱을 실행하고있을 때 꽤 빠를 것이라고 확신합니다

앱 자체에서 시작해서 얼굴을 보자 그리고 지금은 당신이 볼 수 있듯이 이제는 괜찮습니다 내가 할 일에 대한이 비디오에서 나는 너에게 돌아 오기 전에 그 이름을 검색 할 것입니다 이제 검색 할 것입니다 이제는 두 번째 페이지에 있으며 모든 것이 업데이트되고 있음을 알 수 있습니다

이제 막 돌아 가면 볼 수 있습니다 응용 프로그램을 열지 않아도됩니다 책보기의 이전 페이지 그래서 내가 할 일은 간단합니다 이 시점에서 당신은 하나의 백 프레스 세트 방법을 알고 있습니다

stock photography 안드로이드 문제 지금처럼 다시 그것을 호출 하 고 싶습니다 우리는 if 문을 추가하고 webview가 갈 수 있는지 확인해야한다 그래서 우리는 단순히 멋진 경치를 말할 수 있습니다 다시 돌아갈 수 없으며, 갈 수 있다면 갈 수 있습니다 그때 그것은 뒤로 가야한다

그리고 그것은 훌륭한보기와 같이 그 다음 되돌아 가게 될 수있다 그래서 다시 돌아갈 수없는 경우에 대비하여 우리는 응용 프로그램을 닫아야 만 그 활동을 파괴 할 finish 메서드를 호출하면됩니다 주요 활동이며 우리는 단 한 번의 활동 만하기 때문에 이제 응용 프로그램을 닫고 다시 시도하십시오 실행 중입니다 이제 볼 수 있듯이 페이지를로드 중입니다

다시 조명이 꺼질 때까지 기다립니다 이제 다시 해 보겠습니다 Google입니다 내가 할 일은 간단합니다 네가 sabias pkc를 알고 이걸 잘못 선택한 것처럼 검색하면 난 그냥 갈거야

이제 내 YouTube 채널 인 다음 페이지를 알게되었습니다 YouTube 채널과 우리는 3 페이지 떨어져 있거나 2 페이지 떨어져있을 수 있습니다 초기 페이지는 이제 막 돌아가는 버튼을 눌러야합니다 응용 프로그램을 닫아서 필요한 작업을 수행하면됩니다 당신은이 순간 실행 대신에 정상 동작을 알고 있고 이번에 시도합시다

같은 일을 검색하는 것만으로 내 YouTube 채널로 이동합니다 이제는 이번에는 모든 것이 행동 바를 가지고 있습니다 진행률 표시 줄을 완전히로드 한 제목이 표시됩니다 필라델피아 죄책감을 가지고 지금은 여전히 ​​버튼을 눌러 다시 닫을거야 응용 프로그램 그래서 우리는 모든 방법을 다시 가야 괜찮아 확인해야합니다 그래서 오케이 문제는 당신이 볼 수있는 것입니다

사실 저는 실망했습니다 이걸 추가하면 지금 이걸 보면서 좋아 할거야 비디오 당신은 왜 내가 실제로 다른 사람을 추가하지 않을지 궁금해 할 것입니다 지금 나는 그것이 지금 완벽하게 작동 할 것이라고 말한 것을 몰랐다 꽤 확실한 지금은 괜찮을 때까지 기다려 봅시다

아무런 설명도없이 또는 가끔 내 인터넷이 너무 모르겠다 지금 내 채널에 우리는 두 페이지 떨어져 있습니다 그냥 우리가 집에있는 홈 페이지로가는 완벽한 빌어 먹을 참조하십시오 우리가 예상했던 것보다 완벽하게 작동하는 페이지 주요 활동 인 활동을 파괴 할 것입니다 단 하나의 활동 만 있기 때문에 이것은 응용 프로그램을 닫을 것입니다

그것은이 비디오와 다음 비디오를위한 것입니다 우리가 방어하려고하는 것 같습니다 이 애플리케이션에서와 같이 액션 바 항목은 우리가 볼 수있는 것처럼 액션 바 다음에 메뉴가 있습니다 앞으로 메뉴가 있습니다 그런 다음 몇 가지 메뉴가 있습니다

다른 메뉴를 추가하여 Android 앱에 추가하고 다음 동영상에이 대화를 추가 할 예정이므로 항상 감사드립니다 너를보고 지켜라

Retrofit Tutorial — Getting Started and Creating an Android Client

[멋진 음악 소개] 이봐, 모두 무슨 일이야! futurestudio에서 노먼 여기 대학

이 Retrofit 시리즈의 첫 번째 비디오에 오신 것을 환영합니다 시작하기 전에 자습서로 내용을 찾을 수 있어야합니다 웹 사이트에서 쉽게 복사하여 붙여 넣을 수있는 모든 코드 스 니펫을 제공합니다 이 링크는 아래의 설명에서 가장 먼저 나와 있습니다 좋아, 시작하자! 이 비디오에서는 두 가지를 배웁니다

먼저, 개조 서비스가 무엇인지 설명하겠습니다 왜 그것을 사용해야하는지 둘째로 우리는 GitHub API와 상호 작용하는 데 필요한 모든 단계 구체적으로 모든 공개 GitHub 저장소를 사용자의 Android 앱에 표시 할 수 있습니다 Android Studio를 시작하기 전에 Retrofit에 대해 이야기 해 봅시다

개발중인 스퀘어 개조, "Android 및 Java 용 유형 안전 REST 클라이언트"로 설명 그럼 그게 무슨 뜻 이죠? 내가 이야기 해 줄께 2010 년, 내가 안드로이드 개발을 시작한 마커스와 나는 네트워크 요청을하는 방법을 알아 내려고 노력했다 그 당시에는 도서관이 없었습니다

우리는 모든 것을 스스로해야했습니다 낮은 수준의 Java 연결에서 스레딩, JSON 응답 구문 분석 우리의 REST 클라이언트가 작동했습니다 그러나 그것은 복잡하고 지저분했다 개조로 이러한 지저분한 구현 세부 사항이 모두 숨겨집니다 당신은 네트워크 수준에서 물건을 다룰 필요가 없습니다

스레딩에 신경 쓰지 않아도됩니다 요청 및 응답을 구문 분석합니다 Retrofit 만 있으면됩니다 끝점을 설명하는 것입니다 그들은 무엇을 기대하고 무엇을 응답하고 당신은 좋은거야! 이렇게하면 API와 상호 작용하는 앱을 개발하는 것이 훨씬 쉬워집니다

개조는 초기에는 조금 복잡하지만 장기적으로 볼 때 가치가 있습니다 우리는 안드로이드 애플 리케이션에서이 시리즈의 모든 것을 보여줄 것이지만 자바 서버에서도 사용할 수 있습니다 개조는 두 가지 모두에서 가능합니다 이제 우리의 초간편 GitHub 앱을 시작해 보겠습니다 비디오 끝의 목표는 사용자로부터 리포지토리 목록을 표시하는 것입니다

공상에 들지는 않으나, Retrofit을 사용하기 위해 필요한 모든 단계를 밟을 수있는 좋은 방법입니다 그래서 우리는 무엇을해야합니까? 먼저 Retrofit 종속성을 추가해야합니다 다음으로 우리는 말하고 싶은 끝점을 설명해야합니다 그런 다음 GitHub가 JSON을 데이터 형식으로 사용하므로 JSON 매핑을 설정해야합니다 마지막으로 Retrofit 클라이언트를 만들고 요청을 실행합니다

이제 Android Studio로 전환 할 차례입니다! 좋아, Retrofit을 Gradle 종속 항목으로 추가해야합니다 나는 우리 애플 리케이션의 buildgradle에 여기에있다 종속성에서 여기에 두 개의 종속성을 추가 할 것입니다 개조가 자체적으로 네트워킹을 수행하지는 않습니다

개발자가 쉽게 사용할 수 있도록이 레이어 위에 구축되었습니다 개조는 OkHttp를 네트워크 계층으로 사용하고 [의존성으로] 자동으로 가져옵니다 특정 버전의 OkHttp가 필요하면 여기에 다른 종속성을 추가 한 다음 버전을 지정해야합니다 GitHub는 JSON을 응답 및 요청의 데이터 형식으로 사용하기 때문에 변환기를 사용해야합니다 자바 객체를 JSON으로 변환하거나 JSON에서 변환 할 수 있습니다

우리는 이후 비디오에서 변환기에 대해 자세히 설명 할 것입니다 좋아요,이 프로젝트를 동기화 할 차례입니다 API 끝점에 대해 설명하기 전에 AndroidManifestxml을 확인해야합니다 실제로 네트워크 요청을 할 수있는 권한이있는 경우 우리는 여기에 가기 좋습니다

Retrofit을 더 자주 사용하면 API 엔드 포인트를 설명하는 데 대부분 시간을 할애 할 수 있습니다 이제 우리는 정확한 구현이 실제로 우리에게 중요하지 않으므로 인터페이스를 만들고 있습니다 이 GitHub 클라이언트를 호출했습니다 우리의 목표는 사용자의 저장소 목록을 표시하는 응용 프로그램을 구현하는 것이 었으므로 해당 끝점과 메서드가 필요합니다 한 사용자에 대한 저장소를 확보 할 수 있습니다

이 끝점을 설명하기 시작합니다 우리는 사용자로부터 리파지토리를 갖고 싶기 때문에 [reposForUser]를 호출하자 [강렬한 타이핑 노이즈] 또한 리포지토리를 요청하려는 사용자에 대한 매개 변수를 전달하려고합니다 그래서 우리는 String 사용자와 같은 것을 갖게 될 것입니다 마지막으로 우리는 응답이 무엇인지 설명하고 GitHub 저장소의 목록입니다

그래서 "List <>"이고 이미 "GitHubRepo"클래스를 준비했습니다 이것이 바로이 종말점에 대한 우리의 높은 수준의 이해입니다 물론, 실제 구현을 위해서는이 정보가 충분하지 않습니다 따라서 메소드에 더 많은 [메타] 정보를 주석으로 추가해야합니다 먼저 GET 요청임을 지정해야합니다

그리고 우리는 @GET () 주석에 의해 그렇게합니다 그런 다음 요청의 끝점을 알려줍니다 따라서 우리는 GitHub API를 확인하여 / users 아래에 있는지 확인합니다 우리는 사용자 / fs-opensource가 될 것입니다 및 / repos 일반적으로 전체 URL이 아닌 상대 URL을 사용하려고합니다

하지만 나중에 비디오에서 더 이 정적 URL을 사용할 수는 있지만 사용자의 동적 매개 변수를 전달하기 때문에 다소 괴롭습니다 우리는이 사용자 이름을 동적으로이 사용자 이름으로 대체하려고합니다 개조에는 "경로 매개 변수"라는 것이 있습니다 자세한 내용은 이후 비디오에서 자세히 설명합니다

하지만 기본적으로 우리는 이것을 여기에서 대체합니다 {user}를 대괄호로 묶은 다음이 [@String] 매개 변수에 @Path 주석을 달아 주석 처리합니다 Retrofit에게 우리가 여기서 통과하는 것이 여기에서 교체 될 것이라고 말하십시오 이제 런타임 중에 저장소를 요청할 사용자를 결정할 수 있습니다 거의 완료되었습니다 이런 식으로 남겨두면 동기식 메서드가됩니다

따라서 앱에서 GitHub 저장소를 요청하면 네트워크 연결이 시작되고 서버가 응답하고, 응답을 구문 분석 한 다음 초 후에 우리의 응용 프로그램으로 돌아옵니다 이렇게하면 UI가 완전히 멈추고 Android 40 이상에서 [앱]이 다운되기 시작합니다 UI 스레드로부터 요청을하려면 비동기 적으로 처리해야합니다 개조하면이 [async]가 숨겨 지지만 Call <> 객체로 반환해야합니다

따라서 반환 값은 List <>가 아니며 GitHub 저장소 목록으로 형식화 된 Call <List <>>입니다 다음으로 실제로 GitHub 저장소 란 무엇인지 설명해야합니다 그래서 우리는 GitHubRepo 클래스로 뛰어갑니다 이 클래스에서는 GitHub 저장소와 함께 제공되는 데이터의 종류를 설명합니다 이것은 단지 작은 예제 일 뿐이므로 저장소의 이름 인 하나만 지정합니다

우리는 UI에 실제로 사용할 수 있도록 getter를 빠르게 추가 할 것입니다 우린 끝났어 실제로는 더 많은 속성을 여기에 추가해야하지만 지금은 충분합니다 자, 이제 주요 활동으로 갈 시간입니다 이미 데이터를 표시하는 데 사용할 작은 ListView를 준비했습니다

개장의 심장은 "개장 (Retrofit)"이라고 불리는 수업입니다 쉽게 구성 할 수 있도록 개발자는 유창한 API를 추가했습니다 RetrofitBuilder [개조] 빌더를 만들기 시작하겠습니다

[강렬한 프로그래밍] 일반적으로 지정해야 할 한 가지는 기본 URL입니다 처음에는 상대적 URL 만 사용했음을 기억합니까? 이렇게하면 원하는 때마다 기본 URL을 간단히 변경할 수 있고 모든 끝점을 변경할 필요가 없다는 장점이 있습니다 GitHub의 경우 https://apigithubcom/입니다

다음으로 변환기를 추가해야합니다 이미 GitHub가 JSON을 데이터 형식으로 사용한다고 언급했습니다 우리는 Gson이 자바 객체와 JSON간에 변환 할 필요가있다 그것을 추가합시다addConverterFactory를 사용하여 표준 Gson 인스턴스를 전달하려고합니다 조금 더 멋지게 포맷 해 봅시다 우리는 여기서 끝났어 좀 더 복잡해 보이지만 몇 번이나 개조를하면 이해할 수 있습니다 우리는 건축업자를 얻었으므로 실제 개보수 물체를 만들 차례입니다

Retrofit을 말하고 "개장"이라고하며 간단히 "builderbuild ()"라고합니다 나는 그것이 다소 비어있는 것처럼 보지만, 장래에 우리는 인증과 전역 오류 처리와 같은 것들을 추가 할 것입니다 우리의 준비가 끝났기 때문에 실제 요청을 할 때가되었습니다 먼저 GitHub 클라이언트의 인스턴스가 필요합니다

retrofitcreate ()를 사용하면 GitHubClient 클래스 [인터페이스] 만 전달할 것입니다 이것은 GitHubClient 여야합니다 이 "클라이언트"라고 부르 자 다음 단계는 클라이언트에서 reposForUser () 메소드를 호출하는 것입니다

우리는 우리 자신의 GitHub 사용자 이름 "fs-opensource"를 전달할 것입니다 아시다시피 이것은 작은 Call <> 객체를 반환합니다 마지막 단계는이 Call <> 객체를 활용하는 것입니다 여기에 두 가지 옵션이 있습니다 동 기적으로 또는 비동기 적으로 실행할 수 있습니다

UI 스레드에서 활동 중이므로 "대기열에 넣기"라는 메소드로 비동기로 처리해야합니다 우리는 callenqueue ()라고 말하고 콜백을 기대합니다 콜백은 서버에서 응답을 받으면 실행됩니다 여기서는 두 가지 주요 옵션을 다루어야합니다

onFailure () : 인터넷에 연결되지 않은 것처럼 네트워크에 문제가있는 경우 호출됩니다 서버에서 실제로 응답을 받으면 onResponse ()를 호출합니다 실패 상황을 먼저 다루겠습니다 우리는 단순히 사용자에게 무언가 잘못되었다는 사실을 보여줄뿐입니다 분명히,이 문제를 다루는 가장 좋은 방법은 아니지만 지금은 충분합니다

우리는 응답 객체를 사용할 것입니다 body ()가 List <GitHubRepo> 인 것을 볼 수 있습니다 마지막 단계는 ListView에 데이터를 전달하는 것입니다 나는 이것이 실제로 효과가 있는지보기 위해 기쁩니다! 겁탈 자 : 그것은하지 않습니다 : ( 불행히도, 그것은 작동하지 않았고 기본 URL에 약간의 오타가 있었기 때문입니다 그것을 고치고이 일을 다시 시작합시다

자, 가자 오픈 소스 계정의 모든 GitHub 저장소를 볼 수 있습니다 우리가 배운 것을 빨리 재검토합시다 Retrofit을 사용하여 개요 및 초기 구현을 보았습니다 몇 가지 질문이있는 부분이 많았지 만 걱정하지 않으셔도됩니다

향후 동영상에서 그 부분을 참조하겠습니다 관심을 가져 주셔서 감사합니다 새로운 것을 배운 적이 있다면 비디오를 좋아하십시오 이 연재에서 더 많은 비디오를보고 싶다면 구독하십시오 그것을 바위처럼 만들고 코딩을 즐기십시오! [멋진 아웃로 뮤직]