본문 바로가기

[Android] FrameLayout에서 현재 보이고 있는 Fragment 클래스명 알아오기 FrameLayout에서 Fragment를 교체해서 쓰고 있는 경우에는 다음과 같이 하면 된다. 해당 액티비티의 fragmentManager에서 0번째 Fragment를 받은 다음 타입을 확인하면 된다. getSupportFragmentManager().getFragments().get(0) instanceof [확인할 class명]; 이걸로 addOnBackStackChangedListener에서 체크하면서 각 프래그먼트별로 조정해야할 UI나 로직을 적용하면 된다.
[Android] google mvp 샘플의 Injection.class 문제 flavor 별로 다 설정해 놓았음에도 불구하고 Injection 클래스를 계속 못 찾는 문제가 있었다. Dagger를 사용한다면 이럴 일은 없겠지만 직접 DI를 샘플을 따라 구현한다면 다음과 같은 문제를 계속 마주치게 된다. 분명 소스는 있는데 해당 소스를 못 찾는..... Invalidate cache도 하고 clean도 하고 Rebuild도 하지만 flavor를 변경할 때마다 계속 문제가 있어서 인터넷에도 찾아봤는데도 원인을 파악할 수가 없었다. 그래서 혹시나 하는 마음에 Injection이라는 class 이름 대신 다른 이름으로 클래스명을 바꿨더니 이게 웬걸 변경을 해도 너무 잘 빌드가 된다. 소스에서 해당 클래스를 못 찾아서 빨간 줄이 가는 현상도 해결이 되었다. 원인은 일단 나중에 찾아보고 이..
[Android] 코드상으로 CustomToolbar 적용 시 주의사항(XML 아님) CustomToolbar 적용 시 코드 상에서 붙일 때 화면 가로 사이즈에 꽉 채우지 못하는 이슈가 있었다.(inset과는 별개) ToolbarActionBar 클래스를 살펴보니 3개의 method가 해당 기능을 하는 거였는데 다음과 같다.(width, height으로 표시 예정) 1. setCustomView(View view) - 뷰를 WRAP_CONTENT, WRAP_CONTENT으로 설정해서 붙임 2. setCustomView(View view, LayoutParams layoutParams) - 뷰를 밖에서 설정한 레이아웃 크기대로 설정해서 붙임 3. setCustomView(int resId) - 해당 레이아웃 Id을 View로 만든 다음 WRAP_CONTENT, WRAP_CONTENT로 붙임..
[Android] Android Geocoder maxResults 값에 대해서 안드로이드에서 위경도로 주소명을 받을 때 Geocoder 객체의 getFromLocation API를 사용한다. 그런데 getFromLocation에서 결과값 리스트가 비어서 오는 경우가 있었다. 파라미터는 위도, 경도, 그리고 문제의 maxResults 세 개였고 maxResults 이름만 보고 결과값을 최대 몇 개까지 받을 것인지에 대한 파라미터로 추측했었다. API 문서에서도 보면 딱히 자세한 설명도 없고 예제 샘플이나 다른 사람들이 한 것을 보더라도 maxResults 값을 1로 하고 있었기에 추측하고 있는 것이 맞는구나라고 생각했던 것 같다. 봤던 API 문서의 경로는 다음과 같다. developer.android.com/reference/android/location/Geocoder Geoco..
[Android] Retrofit2 응답 대응 처리 onResponse : 서버로부터 응답이 정상적으로 온 경우에 대해서 처리 200, 401, 403 등등의 정상적인 서버 응답 onFailure : 에러 때문에 네트워크 요청 실패 혹은 응답에 문제가 있는 경우에 대해서 처리 Exception 기준으로 분리할 수 있음 java.net.UnknownHostException(해당 호스트를 찾을 수 없는 경우 - 서버가 내려갔다던가... 등등) java.io.IOException(이 경우는 2가지 상황이 있었음) 네트워크 에러 파싱 에러 Retrofit2의 기존 컨버터 이용시 해당 형식으로 파싱이 안 되는 경우 발생 GsonConverter의 경우 모든 Response가 Json형식으로 와야하는데 아무런 데이터가 없는 경우에도 이 에러가 떴음(내부적으론 Jso..
[Android] Retrofit2 Converter를 커스텀 해보기 Android Retrofit2를 사용하면서 GsonConverterFactory를 업무에도 이용하고 사이드 프로젝트에도 이용하고 있다. 하지만 업무 중에 문제가 발생하였는데 200번대(성공일 때)에서 status code로만(ResponseBody가 비어있을 때) 로직을 처리할 경우에 문제가 되었다. 에러의 원인은 ResponseBody의 파싱 에러였는데 GsonConverterFactory에서는 응답 성공일 때 무조건 ResponseBody를 Gson으로 파싱하게끔 되어 있어서 그런 것이 원인이었다. 그래서 직접 만들기로 한 Converter에서는 파싱 에러일 때 body의 Length가 0인 경우 null을 return하도록 수정하였다. import androidx.annotation.Nullabl..
[Android] New Google Play Console 리뷰 7/3에 기존 플레이스토어 콘솔에서 앱 쪽으로 아예 접근이 안 되는 현상이 발생했다. 울며 겨자먹기로 Beta 버전 플레이 콘솔로 이용하게 되었는데 이용하면서 체감이 되는 바뀐 부분들을 정리하고자 한다. 1. 메뉴 정리(상세적인 기능은 같음) - 구글에서 생각했을 때 연관이 되어있을 것 같은 범주로 묶어 놓은 느낌이 든다. 2. 예약게시가 관리형 게시로 이름이 변경되었고 [게시 개요]에서 해당 설정을 수정할 수 있음(앱 정보에 없음) - 개인적으로 잘 바뀌었다고 생각하는 부분인데 기존에는 예약게시를 걸어놓고 게시를 했을 때 예약게시가 풀려서 불편한 부분이 있었다. 바뀌고 나서는 게시를 해도 풀리지 않기 때문에 이 부분이 좋은 것 같다. - 기능에는 변동사항이 없다. 3. 재무 보고서 등 원래 전체 메뉴에..
[Android] Doze 모드로 강제로 만들기 1, 2로 Doze모드를 만들고 3으로 Doze모드를 해제하면 된다. 1. adb shell dumpsys battery unplug 2. adb shell dumpsys deviceidle step - [Stepped to deep : IDLE] 왼쪽의 메시지가 뜰 때까지 2번 반복 3. adb shell dumpsys battery reset