일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 클래스
- 안드로이드 레트로핏 crud
- 멤버변수
- rxjava disposable
- 스택 자바 코드
- 자바 다형성
- rxjava cold observable
- 안드로이드 유닛 테스트 예시
- 안드로이드 레트로핏 사용법
- 안드로이드 유닛테스트란
- 안드로이드 라이선스 종류
- 스택 큐 차이
- 안드로이드 유닛 테스트
- 서비스 쓰레드 차이
- 객체
- ar vr 차이
- 안드로이드 라이선스
- android retrofit login
- jvm이란
- 안드로이드 os 구조
- 서비스 vs 쓰레드
- jvm 작동 원리
- 2022 플러터 설치
- 큐 자바 코드
- rxjava hot observable
- Rxjava Observable
- ANR이란
- 플러터 설치 2022
- 2022 플러터 안드로이드 스튜디오
- android ar 개발
- Today
- Total
목록Android (341)
나만을 위한 블로그
※ 이 글의 코드들은 모두 예시기 때문에 실제로 사용하려면 반드시 리팩토링 후 사용한다 안드로이드 14에서 미디어 접근 권한이 또 변경됐다. 작작 바뀌어라 진짜 어쩔 수 없다. 안드로이드 14에 맞춰 대응하려면 다시 공식문서 뒤적거리면서 뭔 소린지 애써 이해하고, 예시 코드 직접 써 보면서 고통받는 길밖에는 없다. 안드로이드 14의 변경점 중 특기할 만한 것으로는 제목에도 썼듯이 사진, 영상 파일에 대한 일부 접근 권한 부여다. https://developer.android.com/about/versions/14/changes/partial-photo-video-access?hl=ko 사진 및 동영상에 대한 일부 액세스 권한 부여 | Android Developers The Android 15 Devel..
Compose로 앱을 만들다가 하단 탭이 필요한 시점이 와서 구현하고, 어떻게 구현했는지 그 방법을 정리해 둔다. 먼저 sealed class로 앱에서 표시할 화면을 정의해 둔다. 꼭 sealed class가 아니라도 상관없다. sealed class AppScreen( val route: String, @StringRes val resourceId: Int, ) { object Home: AppScreen("home", R.string.home) object Favorite: AppScreen("favorite", R.string.favorite) object MyPage: AppScreen("mypage", R.string.my_page) } 이 클래스는 본인이 어떤 화면들을 만들 건지에 따라 구현이..
Compose로 앱을 만들던 중 CircularProgressIndicator를 써서 로딩 뷰를 구현하고 실행했더니 아래 에러가 발생했다. android java.lang.NoSuchMethodError: No virtual method at(Ljava/lang/Object;I)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; in class Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; or its super classes (declaration of 'androidx.compose.animation.core.KeyframesSpec$KeyframesSpecConfi..
틈틈이 Compose 공부용으로 뉴스 api를 사용한 뉴스 조회 앱을 만들고 있는데, 뷰모델에 함수를 생성한 후에 액티비티에서 호출하면 ApiResult.Success가 호출되지 않는 현상이 발생했다. 아래는 오류가 발생하던 메인 액티비티의 구현으로, 아직 LazyColumn을 사용하기 전의 코드다. @AndroidEntryPoint class MainActivity : ComponentActivity() { private val newsViewModel: NewsViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { ComposeNe..
※ 이 포스팅의 내용은 Gson 2.4 이상부터 사용할 수 있다. 2.4 미만의 버전을 사용 중이라면 버전을 올려야 한다 안드로이드에서 서버와 비동기 통신을 수행하려면 보통 레트로핏을 사용한다. 그리고 @SerializedName을 써서 서버에서 받은 값을 역직렬화하고 앱에서 만들어 둔 data class의 변수에 대입해서 사용한다. 그러나 @SerializedName 안에는 특별한 일이 없다면 하나의 문자열만 넣어서, 그 문자열에 해당하는 값을 JSON 문자열에서 가져온다. 이 때 서버에서 내려주는 JSON의 필드가 스네이크 케이스, 카멜 케이스, 파스칼 케이스인 경우에 모두 대응하려면 어떻게 해야 할까? 이 경우가 아니라도 하나의 @SerializedName이 여러 필드명을 알고 있어야 한다면 어떻게..
레트로핏을 쓰면서 보통 Gson도 같이 사용하는데, 이유는 서버에서 받은 JSON 데이터를 앱에서 사용하려면 Boolean, String 등의 타입으로 바꿔야 하기 때문이다. 이것을 서버는 데이터(객체)를 JSON으로 직렬화해서 앱(클라이언트)으로 보내고, 앱은 이 데이터를 역직렬화해서 적절한 타입으로 변환해 사용한다고 볼 수 있다. 이 때 JSON은 String 형태기 때문에 JSON String이라고 부르기도 한다. 직렬화, 역직렬화에 대해선 아래 포스팅을 참고한다. https://onlyfor-me-blog.tistory.com/494 직렬화(Serialization), 역직렬화(Deserialization)란? 인텐트로 객체를 넘길 때 직렬화라는 걸 사용해서 넘겼던 적이 있다. 예제 코드도 구글에..
개발할 때 라이브러리를 붙여서 쓰다 보면 고쳐서 쓰고 싶은 기능이 있다. 이를 위해 레포지토리에 이슈를 만들거나, 직접 PR을 날리는 방법이 있지만 어쩔 수 없이 내가 직접 수정해서라도 써야 할 수 있다. 하지만 대부분 라이브러리들의 코드들은 읽기 전용 파일로 되어 있어서, 프로젝트에서 수정할 수 없는 경우가 많다. 이 포스팅에선 이런 라이브러리들의 코드를 어떻게 수정할 수 있는지에 대해 적는다. 예시로 사용할 라이브러리는 TedImagePicker다. 커스텀할 라이브러리를 선택했다면 먼저 가장 해야 할 것은 해당 라이브러리의 라이선스 확인이다. 라이브러리의 라이선스 종류는 크게 아래와 같다. Apache 2.0 라이선스 MIT 라이선스 BSD 라이선스 GPL 라이선스 아파치, MIT, BSD 라이선스는..
사진 업로드를 구현하면 핸드폰을 세로나 가로로 들고 찍어서 테스트해볼 것이다. 이후 갤러리에서 사진 파일을 가져온 다음 서버로 업로드하고, 결과를 보면 가로로 찍은 사진은 피사체가 가로로 누워 있거나, 거꾸로 찍으면 180도 뒤집혀 보이는 경우가 발생할 수 있다. 그렇다면 사진이 회전되어 있다는 걸 알 수 있다면 얼마나 좋을까? 돌아간 만큼 거꾸로 돌린 후 업로드하면 회전되지 않은 정상적인 사진을 얻을 수 있을 것이다. 안드로이드에선 ExifInterface라는 클래스를 써서 사진 파일이 갖고 있는 메타데이터 중 회전 각도를 가져올 수 있다. https://developer.android.com/reference/android/media/ExifInterface ExifInterface | Android..
이 에러의 원인은 여러가지지만 둘 중 하나일 수 있다. 파일 접근 권한 미허용 content://와 file:// Uri를 구분하지 않음 그러나 파일 접근 권한을 허용하지 않아서 이런 에러가 생기는 경우는 드물 것이라, Uri 스킴을 구분하지 않은 경우를 고려할 수 있다. 안드로이드의 Uri 스킴은 content, file로 시작하는 두 종류가 존재하는데 각각의 특징은 아래와 같다. content:// scheme 컨텐츠 프로바이더를 통해 데이터에 접근하기 위해 사용 앱과 앱 사이에서 데이터 공유 시 사진, 영상, 연락처 등 다른 앱에서 관리하는 데이터에 접근할 때 사용 파일의 실제 경로를 노출하지 않아서 보안 면에서 유리 file:// scheme 파일 시스템 안의 특정 파일에 접근 시 사용 앱 내부적..
핸드폰 안의 사진들을 바텀 시트 형태로 가져오고 썸네일로 표시해주는 라이브러리인 TedBottomPicker가 4개월 전에 deprecated되었다. https://github.com/ParkSangGwon/TedBottomPicker GitHub - ParkSangGwon/TedBottomPicker: TedBottomPicker is simple image picker using bottom sheet TedBottomPicker is simple image picker using bottom sheet - GitHub - ParkSangGwon/TedBottomPicker: TedBottomPicker is simple image picker using bottom sheet github.com 즉..