Android

    [Android] Kerdy에서 다뤄온 Retrofit 에러 처리

    커디(Kerdy) 프로젝트에서는 서버와의 HTTP 통신을 위해 Retrofit2(이하 Retrofit), OkHttp3 라이브러리를 사용하고 있다. Retrofit는 OkHttp3을 보다 간편하고 직관적으로 사용할 수 있도록 해준다. [Android] OkHttp & Retrofit [Android] OkHttp & Retrofit Android에서 네트워크 작업을 할 때 사용하는 대표적인 라이브러리는 아래와 같다. OkHttp Retrofit 두 라이브러리 모두 Square사에서 개발한 HTTP 통신 라이브러리이다. OkHttp는 HTTP 통신을 간편하게 할 itstory1592.tistory.com 목차 다양한 HTTP 통신 결과 Kerdy가 거쳐온 에러 처리 하나하나 처리하기 공통 top-level..

    [Android] OkHttp & Retrofit

    Android에서 네트워크 작업을 할 때 사용하는 대표적인 라이브러리는 아래와 같다. OkHttp Retrofit 두 라이브러리 모두 Square사에서 개발한 HTTP 통신 라이브러리이다. OkHttp는 HTTP 통신을 간편하게 할 수 있는 기능을 지원한다. Retrofit은 OkHttp를 조금 더 추상화하여, 직관적이고 편리하게 사용할 수 있다. Retrofit은 OkHttp에 의존하고 있다. OkHttpClient를 Retrofit의 Builder에 전달하여 생성하는 방식을 따른다. 결론적으로, Retrofit이 OkHttp에 비해 가진 장점은 크게 3가지라고 생각한다. interface와 어노테이션을 사용하여 직관적이며, Call을 직접 만들어줄 필요가 없다. String 타입으로 전달되는 JSON..

    [Android] BroadcastReceiver 보안 이슈

    BroadcastReceiver BroadcastReceiver는 Android 4대 컴포넌트 중 하나이다. 시스템에서 발생하는 이벤트를 수신하기 위한 목적을 가지고 있다. 예를 들어, 화면이 꺼졌다가 켜진다던지, 단말 부팅이 완료되었다던지, 또는 개발자가 임의로 시스템에 이벤트를 전달하여 Receiver들에게 전달할 수도 있다. 이러한 이벤트를 전달하는 단위를 Android에서는 Broadcast라고 부른다. 이름 뜻 그대로, 방송이라는 의미를 가지고 있다. 그렇기 때문에 이러한 방송을 보고 싶어하는 어플리케이션에서는 이를 수신할 수 있다. Broadcast는 크게 2가지로 구분된다. 바로 명시적 브로드캐스트 vs 암시적 브로드캐스트 이다. 명시적 브로드캐스트 (Explict Broadcast) 특정 ..

    [Android] API 33 onBackPressed() deprecated

    Android API 33에서 개선된 predictive back gesture이다. 이름 그대로 예측 가능한 뒤로가기 동작이라는 의미이다. 이전 버전에서 back gesture를 지원할 때에는 단순히 화살표만 보여주었다. 그렇기 때문에 사용자들은 앱에서 화면을 오른쪽으로 Swipe를 할 때에도 실수로 앱이 닫히는 것을 예측하지 못하는 경우가 빈번했다. 이러한 이유로 Android 13에서는 화면이 작아지는 애니메이션을 추가하여 사용자의 동작이 앱을 종료하고 있음을 예측하도록 변경하였다. Android API 33부터 onBackPressed() 콜백이 deprecated 되었다. Back gesture는 특정 앱에서만 사용 가능한 것이 아니라, 안드로이드 시스템에서 지원하는 기능이다. 따라서, Back..

    [Android] PendingIntent 공식문서 파헤치기

    해당 포스팅은 Android 공식문서를 읽고 정리한 내용을 바탕으로 작성하였습니다. https://developer.android.com/reference/android/app/PendingIntent PendingIntent | Android Developersdeveloper.android.com A description of an Intent and target action to perform with it. Instances of this class are created with getActivity(Context, int, Intent, int), getActivities(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), ..

    [Android] RecyclerView Animation (LayoutAnimation, ItemAnimator)

    RecyclerView는 안드로이드 앱에서 많은 아이템들을 리스트로 보여줄 때 유용하게 사용되는 위젯 중 하나이다. RecyclerView에 animation을 적용할 수 있는 방법은 크게 2가지다. LayoutAnimation RecyclerView.ItemAnimatior LayoutAnimation public class RecyclerView extends ViewGroup implements ... LayoutAnimation은 RecyclerView의 고유한 개념이 아닌, ViewGroup에 통용되는 속성이다. RecyclerView 또한 ViewGroup을 상속하고 있으므로, LayoutAnimation 적용이 가능하다. LayoutAnimation을 적용하는 방법은 아래와 같다. 1. La..

    [Android] Listview vs RecyclerView

    안드로이드에서 아이템을 순차적으로 나열하기 위해서 사용할 수 있는 View는 2종류가 있다. 1. ListView 2. RecyclerView 이 둘은 모두 아이템을 화면에 연속적으로 보여주며, 다양한 ViewType을 정의해줄 수 있다. 그러나 몇가지 핵심적인 차이가 존재한다. RecyclerView와 ListView의 차이점 RecyclerView ListView ViewHolder ViewHolder 패턴을 강제한다. ViewHolder 패턴이 선택 사항이다. Scroll & Layout 수직, 수평 스크롤을 지원한다. Linear, Grid, StaggeredGrid와 같이 아이템 배치를 다양하게 지원한다. 수직 스크롤만 지원한다. Linear(Vertical) 배치만 가능하다. Click Det..

    [Android] ConstraintLayout을 사용해야 하는 이유

    최근 github의 안드로이드 프로젝트의 xml을 확인해 보면, 거의 대부분의 프로젝트가 레이아웃을 ConstraintLayout을 채택하고 있습니다. 뿐만 아니라, 안드로이드 스튜디오에서 새로운 프로젝트를 생성하면 기본 레이아웃으로 ConstraintLayout을 제공하고 있습니다. 기존에 사용되던 LinearLayout, RelativeLayout 등 여러 Layout이 있음에도 불구하고 ConstraintLayout을 사용하는 이유는 무엇일까요? ConstraintLayout ConstraintLayout은 안드로이드에서 제공하는 레이아웃(Layout) 중 하나로, 뷰(View)를 배치할 때 제약 조건(Constraint)을 사용하여 제어하는 방식을 사용합니다. 기존의 LinearLayout, Re..

    [Android] This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) 오류 해결

    Android Studio를 잘 사용하다가, 또는 새로운 프로젝트를 열려고 할 때 위와 같은 오류가 발생할 수 있습니다. 해당 오류는 현재 Android Studio의 버전이 Gradle을 감당할 수 없기 때문에 발생합니다. 새로운 프로젝트를 clone했는데 Android Studio의 버전이 낮은 경우 기존 프로젝트에서 다른 사람의 작업을 pull했는데 gradle version이 높아져 있는 경우 이 외에도 다양한 경우가 있을 수 있습니다. 해결 방법은 간단합니다. 상단 메뉴의 Help -> Check for Updates... 를 클릭합니다. Check for Updates... 는 현재 Android Studio가 최신 버전인지 확인하는 기능입니다. 그러면 위와같은 알림이 우측하단에 나타날 것입니..

    [Android] ViewModel + Event Wrapper Pattern 단일 이벤트 처리

    💬 Single Event 처리 ViewModel의 LiveData를 Observe하고 있으며 값이 True로 변경되면 Toast 메시지를 출력합니다. 그러나, 만약, 디바이스 화면을 회전(Configuration)하였더니 Toast가 한 번 더 호출되는 이슈가 발생합니다 이는 Configuration이 발생하면, 기존 Activity가 Destroy되고 화면이 새롭게 그려지면서 onCreate() 콜백 메서드가 다시금 호출되기 때문입니다. ViewModel은 일반적으로 Activity보다 생명주기가 길기 때문에, Activity가 파괴된다고 하더라도 ViewModel 내부의 필드는 그대로 유지됩니다. 그렇기 때문에 LiveData가 감싸고 있는 데이터는 True 상태를 유지하고 있으며, Activity..