본문 바로가기

2학년/안드로이드

0502 android server

server와의 통신 

 

http 리퀘스트 >> get post 방식이 있다. 

get은 주소창으로 오는 거

 

html 로 온다면? 번거롭다. 자르고 버리고 하는 것이 필요함.

JSON string을 리턴하는 것이 가장 적절하다. 

 

웹 사이트 용 라우터 : 각각의 요청에 따라 html 을 설정

모바일 용 라우터 : 모든 요청에 대해서 JSON으로 응답한다.

모바일 입장에서는 JSON이 html 보다 낫다. 

 

JSON은 안드로이드에서 파싱하는 기능이 기본적으로 되어있다.

html은 split하고 

 

http로 리퀘스트 보내면 비동기식이라서 즉시 오지 않음... 

일반적인 함수호출로 보내면 응답올 때까지 UI가 락이 걸리기 때문에

스레드로 돌린다. 

 

접속스레드, 메인 스레드(리스너 O)를 따로 지정해 둬야 요청 후 락이 걸리지 않는다.

 

TextVIew.setText는 메인 스레드에서 밖에 못쓰고,

접속스레드는 결과를 받긴하는데, 표시는 못한다. 메인 스레드만 UI를 올릴 수 있기 때문

 

 

runinuiThread >> 위를 해결하기 위함인데, 코드가 더러워진다. 

 

안드로이드에서 이건 아닌 것 같아서 제공하는 클래스가 있다. 

서버와 별도의 스레드가 돌아가면서 

 

이 걸 응용해서 확장한다면 앱에서 로그인하고, 서버 접근해서 

 

제일 쉽게 한다면 웹앱을 짜는 것. 네이버 닷컴 띄워서 하는 거 >> but 웹앱을 사용한다면 매우 느려서 안드로이드에서 새로 짜는 것이다.

 

그리고 웹앱은 뷰만 달려있는 거라서 블루투스 같은 거랑 상호작용을 못한다. 

 

안드로이드에서 제공하는 클래스 _ AsyncTask

실행중간에 publishProgress하면 void onPregressUpdate가 호출되어 UI를 바꿀 수 있는것이다.

실행 이후에는 return으로 해서 onPostExecute

 

preExecute는 로딩중이나, UI가 뜨기 전에 띄우는 거.. 

 

중간에 결과를 줘야 하는 10개 중에 1개,, 2개 받았다 할때 pregress.

 

얼마나 진행했는지 정도는 string, integer, 용량의 경우는 소수점으로 주겠지? 그래서 generic으로 parameter, progress, result

 

http, url객체, 아무것도 안줘도 된다. 

 

3가지 클래스 타입 : 지정되지 않았다. 

1. 스레드가 돌릴 파라메터

2. 중간단계를 progress, >> integer, string, double(소수점 있을 때)

3. result > 결과를 뭘로 리턴할 것인가 JSON : string이 만만하다. 그림 : bitmap 가장 대중적인 것은 string

 

void, void, void 넣어 놓으면 결과 받을 때 애먹고, 

string, string, string이 제일 만만하다. 접속중, 다운로드중, 완료 이런 식으로.. 

url, string, string : 어차피 url로 만들어야 하니까

url, integer, string 해서 1단계 완료, 2단계 완료 해서 보내고 싶다면 integer

 

파란색은 서버와 직접 하고, UI 재현은 회색 메소드가 해준다. 

 

 

ipconfig해서 봤을 때, IPv4 주소 에서 .. 

 

IPv4 주소 . . . . . . . . . : 192.168.37.1

localhost가 192.168.37.1 이므로 localhost:port 했을 때
192.168.37.1:port 번호로 대신 적었을 때 되면 그 ip 주소가 맞는 것임.

안드로이드도 하나의 서버이기 때문에 localhost 적으면 자신의 localhost를 들어가기 때문에, 고정 IP를 써야한다. 

 

집에서는.. 

같은 공유기로 폰과 PC를 쓰던지, virtual device를 쓰던지. 

 

템플릿 : 여기서 코드를 추가해 나간다. Main의 내부 클래스로 만들었다. 

 

코드 설명 , execute를 꼭 호출해서 Task안의 변수에 접근해야 한다. 

execute를 호출하면 onpreExecute가 호출되고, 리턴, doinbackground 호출 되고 리턴, onPost 호출되고 리턴된다

 

class Task.. 

WeakReference는 일반변수 일때 사용자가 로딩중에 백 버튼을 눌렀다면 가비지가 메인을 지우지 않기 때문에 WeakReference라는 클래스를 안드로이드에서 만들어줘서 메인이 사라졌다면 지울 수 있게 해준다. 

 

 

 

'2학년 > 안드로이드' 카테고리의 다른 글

0513  (0) 2019.05.13
0509_퀴즈 앱 만들기  (0) 2019.05.09
0429  (0) 2019.04.29
0415 android  (0) 2019.04.15
0412  (0) 2019.04.12