IT 프로그래밍-Android 30

[MVVM 적용기] LiveData와 Databinding

안녕하세요. 오랜만에 글로 찾아뵙네요..ㅎㅎ 그동안 인턴십을 수행하면서 얻은 결과를 정리하느라 글을 못썼네요..ㅠㅠ 안드로이드 개발 인턴십을 통해 MVVM, AAC, RxJava, DI, Test에 대한 내용을 배웠고 앞으로 제가 정리한 내용을 공유하려 합니다. 먼저 제가 이전에도 다뤘던 MVVM과 Databinding에 대해 다시 한번 정리하는 시간을 갖도록 하겠습니다. 우선 제가 그동안 잘못 이해해온 부분부터 정리하도록 하겠습니다. 기본적으로 아래 두 게시물의 내용을 모두 이해하고 계신것으로 간주하고 시작해보겠습니다 ! in-idea.tistory.com/37 [안드로이드] 데이터바인딩 적용하기 안녕하세요. 이번시간에는 안드로이드 MVVM 디자인 패턴을 적용하기 위한 데이터바인딩에 대해 알아보려고 합..

Retrofit + spring 사용 시 JsonObject 파싱 에러

안녕하세요. 오늘은 최근 서버+클라이언트 개발하는 과정에서 겪게된 오류에 대한 글을 공유해볼까합니다. 클라이언트와 서버를 함께 개발하려니 머리가 아주 복잡해지더군요..ㅠㅠㅠ api포멧도 맞춰야하고, 서버 테스팅을 위해 하루에 commit만 몇번을 했는지... 각설하고, 오늘 겪은 이슈에 대해 이야기해보겠습니다. 많은 분들이 안드로이드 통신을 위해 Retrofit 라이브러리를 사용하실텐데요 !! 혹시 올바른 Json형식으로 서버에서 보낸 응답을 클라이언트에서 제대로 받지 못하는 현상을 겪으신 적이 있으신가요 ?? 아래의 오류와 함께 말이죠..! com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT..

[데이터바인딩] Room 데이터베이스 적용하기

지난 시간까지 안드로이드 데이터바인딩에 대해 실습해보았습니다. 이번 시간에는 Room 라이브러리를 통해 데이터베이스를 정의하고 애플리케이션 내에서 영구적으로 존재하는 데이터를 생성하는 실습을 진행해보도록하겠습니다. https://in-idea.tistory.com/37 [안드로이드] 데이터바인딩 적용하기 안녕하세요. 이번시간에는 안드로이드 MVVM 디자인 패턴을 적용하기 위한 데이터바인딩에 대해 알아보려고 합니다. MVVM 패턴을 적용하면 View와 Model간의 의존성을 최소화할 수 있고, View와 관련된 in-idea.tistory.com https://in-idea.tistory.com/38 [데이터바인딩] RecyclerView와 BindingAdapter 지난 시간에 이어서 데이터바인딩 실습을..

[데이터바인딩] RecyclerView와 BindingAdapter

지난 시간에 이어서 데이터바인딩 실습을 진행해보도록 하겠습니다. 오늘은 저번 실습인 텍스트 붙히기 예제를 RecyclerView의 item으로 추가하는 예제를 준비해봤습니다 ! 우선 RecyclerView를 사용하기 위해 gradle 설정을 추가합니다. ... apply plugin: 'kotlin-kapt ... dependencies{ ... implementation 'com.android.support:design:29.0.0' implementation 'com.android.support:support-v4:29.0.0' ... } apply plugin: 'kotlin-kapt'를 하는 이유는 이번 실습의 핵심 기능인 BindingAdapter를 사용하기 위해서 추가해줍니다(코틀린으로 bin..

[안드로이드] 데이터바인딩 적용하기

안녕하세요. 이번시간에는 안드로이드 MVVM 디자인 패턴을 적용하기 위한 데이터바인딩에 대해 알아보려고 합니다. MVVM 패턴을 적용하면 View와 Model간의 의존성을 최소화할 수 있고, View와 관련된 로직을 databinding을 통하여 ViewModel에서 수행할 수 있기 때문에 불필요한 코드를 줄이고 가독성을 높일 수 있다는 장점이 있습니다. 또한 데이터베이스를 참조하는 데이터를 Livedata 또는 Observable를 통하여 동적으로 View에 보여줄 수 있습니다. 이번 포스팅은 databinding 적용하기 기초, bindingadapter 사용하기, Room데이터베이스와 databinding 적용하기 실습으로 진행할 예정입니다. 우선 databinding을 적용한 프로젝트의 구조를 살..

RecyclerView에서 ViewHolder 여러 가지 사용하기

RecyclerView를 사용할 때 RecyclerView.Adapter를 사용하게 됩니다. 만약 같은 RecyclerView에서 다른 모양의 view를 보여주기 위해서는 어떻게 해야할까요 ?? 예를들어 리스트를 Date별로 정렬하고 일수에 따라 구분선이 필요할 경우가 있죠..! 오늘은 RecyclerView에 서로 다른 View를 정의하는 방법에 대해서 이야기 하도록 하겠습니다. 서로 다른 두 개의 Class가 있다고 가정해 보겠습니다. 첫번째는 Place라는 클래스이고 또 하나는 NamedPlace라는 클래스입니다. 클래스 구조는 NamedPlace가 Place를 상속하고 있습니다. 이와 같은 경우 다음과 같이 두 가지의 View로 나타낼 수 있습니다. import android.util.Log im..

DrawerLayout, NavigationView 사용 시 주의사항

메뉴 기능을 구현하기 위해 주로 사용하는 DrawerLayout과 NavigationView를 사용하는 경우가 많습니다. 이번에 기능 구현을 하면서 겪은 이슈와 해결방법에 대해서 정리해봅니다. - onOptionsItemSelected vs OnNavigationItemSelectedListener 주로 ToolBar를 통해 DrawerLayout을 open하는 경우가 많습니다. 그래서 처음에는 onOptionsItemSelected메소드에서 navigation의 menu item 클릭 이벤트를 처리하는 것이라고 생각했습니다. 하지만 NavigationView에는 따로 OnNavigationItemSelectedListener가 존재하기 때문에 navigationView에서 setNavigationIte..

안드로이드 라이브러리 bintray 배포 시 주의할 점

이번에 만든 라이브러리를 bintray에 배포하면서 발생했던 문제에 대해 정리하려고 합니다...! 라이브러리 만드는 것보다 배포하는 게 더 힘들었다는... 첫번째는 bintray 회원가입 시 주의사항입니다. 우선 bintray의 홈페이지에 유도되어있는 free trial 회원가입으로 가입이 되면 기업용 계정으로 30일 체험판으로 가입이 됩니다..(private한 레포지토리를 사용할 수 있지만 체험판이 끝나면 무료배포가 불가능해집니다..!) 아래 주소에서 회원가입을 하도록 합시다 !! https://bintray.com/signup/oss Bintray - Create Your Bintray Account United States United Kingdom Germany Canada France Austr..

[안드로이드] Viewpager와 indicator를 한번에 !!

우리는 간단하게 이미지를 나열하기 위하여 Viewpager를 사용합니다. 그렇다면 인스타그램처럼 여러 사진을 게시물로 게시할 때 아래와 같이 viewpager와 indicator를 함께 사용하기 위해서는 어떻게 해야 할까요?? (실제로는 react로 구현된 다른 라이브러리일 것입니다. 안드로이드의 예시..!) 아마 ViewPager를 만들고 indicator라이브러리를 사용하여 둘 사이의 listener 또는 callback을 달아줘야 할 입니다. 이러한 과정을 간소화한다면 어떨까라는 생각과 함께 viewpager와 indicator를 한 번에 생성할 수 있는 라이브러리를 만들게 되었습니다. 라이브러리의 이름은 SIViewPager..! build.gradle에서 의존성만 추가하면 바로 사용하실 수 있습..

Retrofit을 적용해서 데이터 불러오기

그동안 서버 데이터 불러오기 작업을 하면서 AsyncTask를 통해 백그라운드 처리를 하고 HttpURLConnection객체를 사용해 API매핑을 하였습니다. 긴 코드와 재활용할 수 있어 보이는 코드를 보며 서버 요청 라이브러리가 있으면 좋을 것 같다는 생각을 하였는데 아니나 다를까 많이 들어보던 Retrofit이라는 라이브러리가 바로 그것이었습니다. 오늘은 Retrofit을 통하여 서버에서 데이터 요청을 하고 커스텀 객체에 적용하는 실습을 진행해보도록 하겠습니다. 우선 gradle 종속성을 추가합니다. implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4..