본문 바로가기

Android57

Socket을 이용한 서버와 클라이언트 통신 네트워킹이란? 요새는 인터넷을 사용하지 않는 앱을 찾기 힘들 정도로 거의 모든 앱에서 인터넷 통신이 들어간다. 이렇게 인터넷 상의 한 지점(서버)과 앱(클라이언트) 사이의 통신을 네트워킹이라고 한다. 클라이언트와 서버 간의 연결 방식으로는 여러가지가 있는데 몇가지를 알아보자. 먼저 클라이언트가 요청하고 서버는 응답하는 가장 기본적인 형태인 2-tier 모델이 있다. 다음으로 데이터의 양이 많아짐에 따라 데이터를 저장하는 데이터 서버를 따로 두고, 클라이언트에 요청을 받아 응답하며, 데이터 서버에 요청을 보내 응답을 받는 응용 서버를 두기도 한다. 이를 3-tier 모델이라고 한다. 그렇다면 이렇게 클라이언트와 서버 간 통신에 사용되는 네트워킹 기법을 알아보자. Socket 통신이란? Socket 통신이란.. 2020. 4. 23.
AsyncTask 사용법 AsyncTask란? Thread를 사용할 때는 UI 객체에 접근하기 위해서는 Handler를 통해 접근해야 한다. 하지만 AsyncTask를 사용하면 하나의 클래스 안에 Thread 동작 부분과 UI 접근 부분을 동시에 정의할 수 있다. 따라서 Thread에 비해 하나의 작업 단위를 하나의 클래스로 정의할 수 있다는 장점이 있다. 사용법 AsyncTask 클래스를 상속받아 클래스를 정의할 때는, 다음과 같은 메소드들을 정의해준다. 1. doInBackground() AsyncTask를 시작하면 자동으로 실행되는 코드 부분 (Thread 부분) 2. onProgressUpdate() AsyncTask가 동작하는 중간중간 상태를 업데이트 하는 부분 (주로 UI 업데이트에 사용) 3. onPostExecut.. 2020. 4. 23.
Thread와 Handler 사용법 Thread와 Handler란? 앱을 구현할 때 하나의 기능이 실행되는 중 다른 기능이 동시에 실행되어야 할 때가 있다. 예를 들어 우리가 게임을 하는 동안에 동시에 채팅도 할 수 있게 구현하고 싶다면 Thread를 사용하면 된다. Thread를 사용하면 현재 실행되고 있는 코드와 별도로 시스템에서 자원을 할당하여 동시에 실행시켜 준다. 프로젝트를 생성하면 Main Thread 하나로 작동하며, 여기에 다른 Thread를 추가하여 사용할 수 있다. 동시에 여러 기능을 수행한다면 Service를 사용하면 되지 않을까 라고 생각할 수 있다. 여러 차이가 있지만 Service는 UI가 없이 동작하는 반면, Thread는 UI에 접근하여 수정하는 것이 가능하다. 이 때 여러 가지 Thread가 동시에 UI에 접.. 2020. 4. 23.
Fragment에서 ViewPager 사용 시 문제점 문제점 NavigationDrawer의 Fragment 위에 ViewPager를 올려서 사용하려 했다. 그러나 navigation을 통해 다른 fragment로 이동 후 돌아오면 ViewPager가 사라지는 현상이 발생함. 해결 방법 // 잘못된 코드 MovieListPagerAdapter adapter = new MovieListPagerAdapter(getActivity().getSupportFragmentManager(), 1); // 올바른 코드 MovieListPagerAdapter adapter = new MovieListPagerAdapter(getChildFragmentManager(), 1); adapter 객체 생성 시 생성자에 FragmentManager를 파라미터로 넘겨주어야 했는데.. 2020. 4. 20.
Navigation Drawer Activity에서 Fragment 전환 문제점 NavigationView는 NavHostFragment라는 fragment 하나를 놓고 내용물을 바꾸면서 작동한다. 여기에 FragmentManager를 통해 transaction으로 add 또는 replace하여 fragment를 변경하려 했음. fragment가 바뀌긴 했으나 fragment가 남아있거나 기존 NavHostFragment를 불러오지 못하는 등 문제가 생김. 해결 방법 Navigation은 Destination과 Action으로 구성된다. Destination은 말 그대로 목적지로 fragment를 의미하고, Action은 fragment 간 이동을 말한다. 결론은, navigation 파일에 이동할 fragment를 추가한 뒤 action을 정의하니 깔끔하게 동작. 이동할 f.. 2020. 4. 20.
Fragment에서 startActivityForResult 사용 시 문제점 문제점 Fragment에서 startActivityForResult()를 통해 requestCode 101로 새 액티비티로 이동한 뒤 복귀했더니 정상적으로 intent에 저장된 데이터는 받아왔으나 requestCode가 65673과 같이 이상한 숫자로 넘어옴. 또한 onActivityResult() 함수가 Fragment에 없음. 해결 방법 public void moveToReviewWrite(){ Intent intent = new Intent(MainActivity.this, ReviewWriteActivity.class); startActivityForResult(intent, REQUESTCODE_REVIEW_WRITE); } 먼저 MainActivity에 메소드를 만들어 fragment에서 호출.. 2020. 4. 20.
Drawer Navigation 사용 시 menu의 group 나누기 1. group 하나로 묶었을 경우 구분선 없이 모두 모여 나타남. 2. group만 나눈 경우 똑같이 구분선 없이 하나의 그룹처럼 보임. 3. group을 나눈 뒤 각자 다른 id 부여 구분선이 생겨 그룹이 나뉘어진 걸 식별할 수 있음. 1. group을 나눈 뒤 menu와 item 태그로 한번 더 감쌈. item에 title을 설정한 뒤 감싸주었더니 구분선과 함께 label이 나타난 것을 확인. 2020. 4. 20.
Navigation Drawer Activity 살펴보기 NavigationDrawer란? 앱을 사용하다보면 막대기 세개 모양을 클릭하면 좌측이나 우측에 메뉴 목록이 나타나는 앱이 있다. 이 화면을 바로가기 메뉴 화면이라고 하며, 안드로이드에서는 NavigationDrawer라는 이름으로 제공하고 있다. 기본적으로 DrawerLayout 내부에 NavigationView를 추가하여 구현한다. NavigationView는 단어처럼 사용자가 원하는 destination(fragment)까지 navigate하는 역할을 한다. NavigationView의 메뉴 부분의 item을 클릭하면 activity의 fragment를 전환하여 원하는 화면으로 이동시켜준다. 그리고 이 부분 화면을 fragment로 구성하기 때문에 코드 구성을 잘 모르겠다면 fragment 글을 참.. 2020. 4. 17.
ViewPager에 TitleStrip/TabStrip 추가하기 TitleStrip이란? ViewPager를 사용하면 좌우 스크롤 만으로 fragment들을 바꿔줄 수 있어 편리하다. 하지만 사용하다보면 현재 표시되는 fragment가 전체 fragment 중 어떤 것인지 알기 어려울 때가 있다. 이 때 TitleStrip을 이용하면 전체 fragment의 개수와 현재 표시되는 fragment의 번호를 표시해 줄 수 있다. TitleStrip 사용법 먼저 ViewPager를 구현해야 하는데 이 글에서는 앞선 'ViewPager 사용법' 글의 코드를 사용하였다. https://ju-hy.tistory.com/55 ViewPager 사용법 ViewPager란? ViewPager는 좌우 스크롤을 통해 화면을 넘겨볼 수 있는 기능을 제공해준다. 부분 화면 여러 개를 변환하여.. 2020. 4. 14.