Android/Debugging

viewModelScope.launch{ RetrofitService.naverService.getSearchNews(query = keyword, sort = "sim").run{ if (isSuccessful){ ... } else { ... } } } Retrofit을 사용할 때 Coroutine과 사용하게 되면 enqueue()의 비동기 코드를 실행하는 코드가 없어도 스스로 값을 가져오게 된다. 그래서 바로 Response를 사용해 요청 이후의 응답을 바로 받아 사용을 한다. 이 동작에 대해 이해하려 한다. enequeue의 내부적 구현 Retrofit 사용 API Interface 구현체 내부적 구현 사용 개발자는 Interface에 추상적인 api 함수들을 Retrofit Annotaion과 ..
사용 개발자는 Interface에 추상적인 api 함수들을 Retrofit Annotaion과 함께 정의한다. interface NaverApi { @GET(RetrofitService.NEWS_END_POINT) suspend fun getSearchNews( @Header("X-Naver-Client-Id") clientId : String = BuildConfig.NAVER_CLIENT_ID, @Header("X-Naver-Client-Secret") clientPw : String = BuildConfig.NAVER_CLIENT_SECRET, @Query("query") query : String, @Query("sort") sort : String, ): Call } Retrofit Builde..
Room을 사용 중 빌드 창 warning 문구 warning: Schema export directory is not provided to the annotation processor so we cannot export the schema. You can either provide `room.schemaLocation` annotation processor argument OR set exportSchema to false. Room 라이브러리를 사용해서 Database 스키마를 생성할 때 exportSchema 설정에 의해 위의 경고가 뜬다. exportSchema는 Boolean 타입으로 Database Schema를 폴더로 내보낼지 정할 수 있다. default 값이 true로 되어있어 경로를 지..
Android Studio Dolphin 버전에서 새로 나온 LogCat의 필터 쿼리 내 앱에서 발생하는 내용만 보기 (PIDs for the local app project) package:mine 내 앱에서 발생하는 내용에서 필터링 (ex) ViewModel 또는 UiState라는 문자가 포함된 내용만 필터링 package:mine ViewModel | UiState 패키지, 태그, 레벨 조합 package:my-package-ID, tag:my-tag, level:ERROR -를 붙여 특정 태그 제외 -tag:exclude-this-tag 정규 표현식 (~을 키값 뒤에 붙여준다) tag~:regex-tag Logcat https://brownsoo.medium.com/새로운-로그캣-필터-쿼리-a77..
SDK 버전을 높이기 위해 변경된 사항과 수정해야 할 사항들 중 중요하다 판단되는 것들을 알아보고 정리 Performance and battery Foreground Services (FGS) 작업 관리자 Android 13(API 33)에서는 타겟 SDK 버전과 관계없이 사용자가 "알림 창"에서 "포그라운드 서비스"를 중지할 수 있다. FGS 작업 관리자라고 하는 새로운 기능에는 현재 포그라운드 서비스를 실행 중인 앱 목록이 표시된다. 이 목록에는 활성 앱이라는 라벨이 적용되어 있다. 각 앱의 옆에는 중지 버튼이 있다. 아래 그림은 Android 13을 실행하는 기기에서 FGS 작업 관리자 워크플로를 보여준다. JobScheduler를 사용한 작업 미리 가져오기 처리 개선 JobScheduler는 앱이..
어느 순간 잘 뜨던 구글맵이 뜨지 않아 Logcat을 보았다. Authorization failure과 Ensure that the "Google Maps Android API v2" is enabled. 인증키 오류의 Log들이 찍힌 걸 확인 관련 검색을 해보면 Api가 활성화되어있나 확인해 보고 제한사항을 줄 때 패키지 이름을 제대로 주라는 말들이 대부분이다. 하지만 API도 다 활성화되어있고 제한사항의 패키지 이름과 Api 제한사항도 다 맞춰서 해놓았는데도 같은 오류가 반복되었다.. Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()..
USB 케이블이 불편해 케이블을 이용하지 않고 테스트 폰을 연결하는 방법을 알아보았다. Android 11부터 무선 디버깅(wireless debugging)이 추가 되었다. 포스팅에서 이전 버전의 방법과 추가된 기능의 방법을 포스팅 할 것이다. Android 11 이전의 방법 디바이스에서 adb를 위한 TCP/IP port를 열어놓고, PC에서 adb로 디바이스 IP:port 로 연결 1) USB 연결 2) Android Studio 에서 Terminal 실행 : Android Studio 하단에 Terminal을 연다. 3) 다음의 커맨드를 실행해서 adb를 위한 tcpip 포트를 연다. > adb tcpip 5555 뒤에 오는 5555는 포트번호로 사용가능한 포트를 써준다. adb가 터미널에서 실행..
startActivityForResult()가 deprecated된 이유 AndroidX Activity, Fragment에 도입된 Activity Result API 사용을 적극 권장하고 있음 결과를 얻는 Activity를 실행하는 로직을 사용할 때, 메모리 부족으로 인해 프로세스와 Activity가 사라질 수 있음 기존 Activity에서는 startActivityResult를 통해서 콜백을 등록하고, onActivityResult에서 콜백을 처리한다. 두 메서드가 같은 곳에서 구현을 해야하는데, 메모리 부족으로 제대로 동작을 안할 수 있다는 것 - Activity가 종료되었다가 다시 생성되었을 때 Activity에게 결과를 기다리는 중임을 다시 알려야 한다. 기존 API 화면 전환 startActi..
오류가 시스템 레벨에서 발생한다면, 예외(Exception)는 개발자가 구현한 로직에서 발생한다. 예외는 발생할 상황을 미리 예측하여 처리할 수 있다. 예외는 개발자가 처리할 수 있기 때문에 예외를 구분하고 그에 대한 처리 방법을 명확히 알고 적용하는 것이 중요하다. Exception 종류 내용 ClassNotFoundException 클래스를 찾지 못함 CloneNotSupportedException 인터페이스를 미구현함 IllegalAccessException 클래스에 접근 불가함 InstantiationException 추상 클래스, 인터페이스를 인스턴스화 하고자 함 InterruptedException Thread가 중단됨 NoSuchFieldException 지정된 필드가 없음 NoSuchMet..
bumjae
'Android/Debugging' 카테고리의 글 목록