1 / 47

만들면서 배우는 Android 세미나

만들면서 배우는 Android 세미나. 3. Network Connection, Fragment. 시작하기전에. AVD 를 켭니다 . 새로운 프로젝트를 만듭니다 . 시작하기전에 배경지식을 쌓기위해 다음 키워드에 대해 배우겠습니다 . GET / POST JSON Stream Thread 저 4 가지 키워드 하나하나가 정말 중요하면서 어려운 개념이기때문에 주의깊게 듣고 , 모르는게 있으면 꼭 질문하세요 이거 모르면 아무것도 못해요. Get / Post. Http request 의 두가지 방식

Télécharger la présentation

만들면서 배우는 Android 세미나

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 만들면서 배우는 Android 세미나 3. Network Connection, Fragment

  2. 시작하기전에 • AVD를 켭니다. • 새로운 프로젝트를 만듭니다. • 시작하기전에 배경지식을 쌓기위해 다음 키워드에 대해 배우겠습니다. • GET / POST • JSON • Stream • Thread • 저 4가지 키워드 하나하나가 정말 중요하면서 어려운 개념이기때문에 주의깊게 듣고, 모르는게 있으면 꼭 질문하세요이거 모르면 아무것도 못해요

  3. Get / Post • Http request의 두가지 방식 • Get : 값을 request url로 전달한다. • Post : 값을 Http request header로 전달한다. • 자세한 설명은 생략한다.

  4. Get / Post example • 생략하려고 했는데 아무래도 알아야 할 것 같다. • height = 180, weight = 65 라는 정보를 전달하고 싶다.

  5. Get 방식으로 보내면 • Get 방식 • http://foo.bar.com/main?height=180&weight=65 • 으로 요청해서 전달한다. • request header에는 특별한 게 없다. • GET /main?height=180&weight=65 HTTP/1.1 Host: foo.bar.com Cache-Control: no-cache Content-Type: application/x-www-form-urlencoded

  6. Post 방식으로 보내면 • request url은 그대로두고 • http://foo.bar.com/main/ • request header에 data가 포함된다. • POST /main HTTP/1.1 Host: foo.bar.com Cache-Control: no-cache Content-Type: application/x-www-form-urlencoded height=165&weight=80

  7. Get vs Post • 아래 해당사항은 전부 OR 로 이해하길 바람. • Get • 전달하고 싶은 내용이 짧다.(ex :page_number) • 사용자가 알아도 상관없고, 임의로 요청해도 상관이 없다. • Post • 전달하고 싶은 내용이 길다.(ex :글쓰기 요청을 할 때 글 내용,File) • 사용자가 임의로 조작하면 안된다. • 사용자게에 들키고 싶지 않다.(비밀번호)

  8. Json • JSON (JavaScript Object Notation)은 경량의 DATA-교환 형식이다. 이 형식은 사람이 읽고 쓰기에 용이하며, 기계가 분석하고 생성함에도 용이하다. • XML과 비슷하다. • 그냥 단순히 데이터를 텍스트를 주고받을 때 쓰는 약속이다.

  9. Json Example 위 : Json, 아래 : XML

  10. Json • 모르겠으면 그냥 그런가보다 하세요 • 이번 세미나만큼은 주입식 교육..

  11. server setting • 제가 간단한 서버를 만들어 두었습니다. • http request • http://bit.sparcs.org:20220/get_list • Get • parameter • None • 모든 사람의 이름의 리스트를 리턴한다. • http://bit.sparcs.org:20220/get_person • Get • parameter • name : 찾을 사람의 이름 • 해당 이름을 가진 사람의 자세한 정보를 리턴한다.

  12. server setting • http://bit.sparcs.org:20220/add_person • Post • parameter • name : 새로 만들 사람의 이름 • author : 작성자 이름 • description : 설명 • 새로운 사람을 server의 DB에 추가한다.

  13. Stream • 이게 참.. 설명하기가 힘드네 • I/O라는거 알죠? • Input, Output • input과 output이 필요한곳이 정말 많아요 • Input : 마우스, 키보드,File, Network Connection • output :모니터, 프린터,File, Network Connection • 그런데 이 수많은 I/O들을 하나하나 다루려면 정말 어렵겠죠 모니터 따로, 프린터 따로,File 따로 Network 따로..

  14. Stream • 그래서 Java가 참 고맙게도 Stream이라는 것으로 추상화를 해줘서 우린 프린터든 모니터든 File이든 뭐든간에 그냥 Stream을 쓰면 됩니다.

  15. Stream • Stream은 빨대에요 • 콜라잔에 빨대를 꼽고, 내입에도 콜라를 물고있다고 해봅시다. • 빨대는 빨기 전용 빨대와 좀 드럽지만 내뱉기 전용 빨대 두가지가 있어요.(InputStream, OutputStream) • 빨대에 양쪽끝에 뭐가 연결되있든 상관이 없어요 • 잔대신 페트병이 있어도 되고 접시가 있어도 되요 • 주둥이대신 콧구멍이 있어도 되고 펌프가 있어도되요

  16. Stream • Stream은 종류도 드럽게많아요 생각나는 것만 몇개 적으면(output stream은 똑같으니까 생략) • BufferedInputStream • data를 Buffer에 모아서 한번에 읽을 수 있어요 • 1kb를 읽는데 1byte씩 1000번 읽는 것 보다 100byte씩 10번만 읽는게 훨씬 빠르겠죠? • Network 연결에서 유용하게 사용 되겠죠? • FileInputStream • File이름을 주면 File을 읽게해줘요 • PipedInputStream • 뒤에서 Thread에 대해 배울텐데,2개의 Thread사이의 통신을 할 수 있어요 • 이외에도 드럽게 많음

  17. Stream • 그런데 참 걱정인게 Buffer를 써서 File을 읽고싶으면 어떻게 해야할까요? • BufferedInputStream을 써야할까요 FIleInputSream을 써야 할까요? • 그래서 Stream은 Decorator pattern 이라는 design pattern을 이용해요 • 크리스마스 장식을 하는데 꼭 별만 달거나 전구만 달 필요 없죠 • 별도 달고 전구도 달고 솜도 달고 이것저것 다 달면 좋잖아요

  18. Stream • Stream도 크리스마스 트리처럼 Buffer도 달고 File도 달고 Piped도 달고 할수 있어요 • 어떻게? • 이렇게 • new BufferedInputStrean(new FileInputStream(“filename”)); • 겹겹이 몇개든 씌울 수 있어요

  19. Thread • Process 내에서 실행되는 흐름의 단위 • MultiThreading이라고 많이 들어봤죠?

  20. Thread in Android • Main Thread • 우리가 지금까지 쓰던게 다 Main Thread입니다. • Main Thread는 정말 중요한 임무가 하나 있는데 • 바로 “View를 만드는 일!” 을합니다. • 인터넷에 연결해 Response를 받는 일은 긴 시간이 걸립니다. • Main Thread에서 인터넷에 연결하는 작업을 실행하면 어떻게될까요? • Main Thread가 그사이에View를 만들 수 없어서 화면이 Freezing 된다.

  21. Thread in Android • 그래서 Android는 Main Thread에서 인터넷 연결을 하는 것을 금지하고 있습니다.(하면 Exception) • 그럼 어떻게 해야 할까요? • 다른 Thread를 만들고 그 Thread에서 돌리자

  22. Thread in Android • 그런데 문제가 또있어요 동시에 실행되는 여러개의 Thread가 전부다 View를 컨트롤(움직이거나, 텍스트를 바꾸거나, 색을 바꾸거나..)하면 무슨일이 생길까요? • Concurrency 문제가 생길 확률이 크다! • 뭔말인지 모르겠으면 그냥 얘기치 못한 오류가 생긴다고 알고있으세요 • 그래서 Android는 Main Thread만 View를 컨트롤 할 수 있습니다.

  23. Android • 본격적으로 만들어보자

  24. Android • 오늘부턴 코드를 제공하므로 따라칠 필요가 없습니다. • 대신 미묘하게 알파벳을 뒤섞이거나, 추가하거나, 제거해둘테니 고쳐서 쓰세요 • 자동완성을 이용하셔야 잘 고칠 수 있습니다.

  25. AndroidMenifest.xml • Internet을 쓰려면 권한이 필요하다. • <uses-permission android:name="android.permission.INTERNET"/> • (붙여서)uses-sdk아래에 작성

  26. version 1 • 작성순서 • activity_main.xml • Person.java • NetworkManager.java • MainActivity.java

  27. What Are We Doing? • NetworManager.java • enum? INSTANCE? 이상해요.. 이게뭐죠.. • enum을 이용해 Singleton pattern을 구현한 것이다. • instance가 1개만 존재해야할 때 사용된다. • 뭔지 잘 모르겠으면 그냥 따라서 치자.. 첫부분 빼고는 다 똑같다. • setDoInput,setDoOutput • 연결된 http connection에서 input과 output을 사용할지 말지를 결정한다.Get방식은 input만 사용하면 되고,Post는 input과 output을 모두 사용해야 한다. • 솔직히 이것들은 너무 복잡해서 PPT로 설명하긴 너무 어렵다. • 나중에 PPT만 보고 공부하게 될 후배들에겐 미안하지만 그냥 말로설명하겠다.

  28. What Are We Doing? • MainActivity.java • CustomAdapter는 귀찮아서 안쓰겠다.(원래는 쓰는게 자연스러움) • ListActivity는 뭔가요? • Activity를 상속하는 클래스이다. • ListView가 Activity에 들어있을 때 간편하게 다룰 수 있도록 getListView(), setListAdapter()같은 다양한 메소드를 제공한다. • 대신 xml에 @android:id/list를 가진 ListView가 존재해야 runtime Error가 안난다.

  29. What Are We Doing? • Thread가 어떻게 작동하는 건가요? • 1.Thread는 constructor가 parameter로 Runnable Instance를 받는다. • Thread Instance 의 start(); method로 Thread Instance를 만들 때 받은 Runnable Instance의 run() method를 실행시킬 수 있다. • Thread Instance의 start()을 실행하는 순간 Main Thread와 방금 만든 Thread두개가 동시에 실행된다. • 따라서 Main Thread가 Network Connection에 매달릴 필요가 없기때문에 화면이 Freezing 되지 않는다.

  30. What Are We Doing? • post method는 뭔가요? • Thread 내에서 View에 관련된 일을 하는 것은 금지되어있고, 반드시 Main Thread만 View에 관련된 일을 해야한다. • View.post(Runnable runnable) method를 통해서 MainThread의 작업 Queue에 할일을 넣어줄 수 있다. • listview에 adapter를 달아 주는 일은 Main Thread에서만 실행할 수 있기 때문에 postmethod로 넘겨주었다.

  31. 실행해보자 • 부자연스러운 점이 있다. 왜일까? • 로딩바가 없어서! • 로딩바를 만들어보자

  32. version 2 • 다음 순서로 작업하자 • activity_main.xml • MainActivity.java

  33. develop, develop • 이름을 클릭하면 자세한 설명이 나오도록 해보자.

  34. version 3 • 다음 순서로 • detail.xml • DetailActivity.java • MainActivity.java

  35. AndroidMenifest.xml • Activity 추가

  36. develop, develop • 이제 사람을 추가해보자

  37. version 4 • 작성 순서 • xml들 • AddActivity.java • MainActivity.java

  38. What are we doing? • MainActivity부분은 저번시간에 설명한 적이 있는 startActivityForResult를 사용하였다. • OnActivityResult에서 Result_OK신호가 도착했을 때,List를 Refresh해주기 위해서 다시 Thread를 이용한다.

  39. What are we doing? • AddActivity.java • 저번시간에 한 것과 비슷하다. • Add버튼을 누르면 Network Request를 통해 server의 db에 새로운 Person을 등록하고 result를 설정한다.

  40. The End • 끝! • 하지만..

  41. 모르면 개발 “절대” 못하는 것들 • Fragment • GCM(push, Notification) • Widget • Using Library • DataBase

  42. Homework • 그래서 준비했습니다 Homework • 1~3명씩 조를 짜서 다음 다섯가지 주제 중 하나를 선택하여, 그 주제를 활용한 어플리케이션을 만들어오세요 • 간단해도 됩니다. 코드 한줄한줄을 제대로 설명만 할 수 있으면!

  43. Homework • 다음 다섯가지 주제들은 정말로 모르면 개발 할 수 있는게 별로 없습니다. 기껏해야 이상형 리스트정도? • 이 외에도 알아야 할 것이 태산이고, 그 대부분은 혼자 공부해야 합니다. • 기간은 다음주 화요일 까지입니다. • 다음 시간은 각각의 팀이 만든 어플리케이션을 그 팀이 주제와 함께 간단히 설명하겠습니다.

  44. Homework • 꼴지팀은 매점을 쏴야 합니다.

  45. 주제 • Fragment • ex : 탭 구현하기 • 카카오톡이 친구, 채팅, 친구찾기, 더보기 4개의 탭을 가진 것 처럼 • GCM(push, Notification) • ex : device 등록, 해지하고 푸쉬 보내기. • Widget • ex :D-day 계산기

  46. 주제 • Using Library • 2개이상 사용! • git hub에서 slidingmenu, endless adapter, color picker같은 다양한 라이브러리 사용해보기 • DataBase • 주소록 만들어보기 • 삽입, 제거, 수정, 그룹 기능 필요

  47. The End • 다음주 화요일에 봅시다!

More Related