일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 서비스 vs 쓰레드
- 안드로이드 유닛 테스트
- rxjava disposable
- android ar 개발
- 객체
- Rxjava Observable
- 2022 플러터 설치
- 안드로이드 유닛 테스트 예시
- 안드로이드 레트로핏 crud
- 안드로이드 os 구조
- 스택 큐 차이
- 안드로이드 레트로핏 사용법
- 2022 플러터 안드로이드 스튜디오
- jvm이란
- rxjava cold observable
- 안드로이드 유닛테스트란
- 자바 다형성
- 안드로이드 라이선스
- jvm 작동 원리
- 서비스 쓰레드 차이
- android retrofit login
- 스택 자바 코드
- 멤버변수
- 플러터 설치 2022
- rxjava hot observable
- 안드로이드 라이선스 종류
- 클래스
- ar vr 차이
- ANR이란
- 큐 자바 코드
- Today
- Total
목록Android (378)
나만을 위한 블로그
틈틈이 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 파일 시스템 안의 특정 파일에 접근 시 사용 앱 내부적..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/VnVGp/btsCzI8F9uZ/ETsG6tJBYo3Xk52RCtEeEk/img.png)
핸드폰 안의 사진들을 바텀 시트 형태로 가져오고 썸네일로 표시해주는 라이브러리인 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 즉..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c4Nelt/btsCf2mn0Bt/AhgFtTOZrpbt6baTb8UPDk/img.png)
코루틴을 다룰 때 Job이란 개념은 중요하게 취급된다. 아는 사람도 있겠지만 흔히 사용하는 코루틴 빌더 중 launch의 리턴 타입은 Job이다. public fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutineContext, start: CoroutineStart = CoroutineStart.DEFAULT, block: suspend CoroutineScope.() -> Unit ): Job 이 Job은 대체 무엇인지 알아본다. 코틀린 공식문서에선 아래와 같이 설명한다. https://kotlinlang.org/api/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines/-..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b7pWvs/btsBQU3Uu4C/nebiLyMapcjRkV6LXbwaP1/img.png)
이전 포스팅에서 앱 링크에 대해 알아봤으니 실제로 적용은 어떻게 하는지 확인한다. 프로젝트를 실행한 다음 Tools > App Links Assistant 순서로 클릭한다. 안드로이드 스튜디오 자체적으로 앱 링크를 설정하는 데 도움을 주는 장치가 있는데 이것을 사용해서 앱 링크를 프로젝트에 적용해 본다. 그러면 안드로이드 스튜디오 우측에 앱 링크 어시스턴트 화면이 표시된다. 매니페스트에 인텐트 필터 태그와 data, action, category 태그들을 자동으로 추가해 줄 URL Mapping Editor 실행 버튼과 앱 링크를 통해 앱이 실행되면 실행시킬 액티비티를 고르는 버튼 등이 보인다. 먼저 Open URL Mapping Editor 버튼을 누른다. 아직 앱 링크가 없으니 아래와 비슷한 화면이 ..
이전에 딥링크를 다루면서 구현 방식 중 하나로 앱 링크란 것을 말한 적이 있다. https://onlyfor-me-blog.tistory.com/791 딥링크(Deep link)란? 핸드폰에서 어떤 링크를 누르면 웹 페이지로 이동하는 경우도 있지만, 설치돼 있던 앱이 실행되면서 그 링크가 가리키는 특정 화면으로 이동하는 경우도 있다. 후자의 경우를 구현할 때 사용하 onlyfor-me-blog.tistory.com 이 포스팅에선 앱 링크에 대해 개략적으로 설명하고 넘어갔기 때문에 좀 더 앱 링크란 것에 대해 디벨로퍼를 확인하고 다른 사람들의 설명을 확인한다. 디벨로퍼의 설명이 잘 돼 있어서, 앱 링크를 확인하려면 먼저 디벨로퍼 공식문서를 싹 훑는 게 좋을 듯하다. https://developer.andr..