당황스러운 일이 있었다. 예전부터 구글 파이어베이스를 통해 구글 애널리틱스의 연동하여, 사용자를 모니터링하고, 앱 코드 안에 있는 logEvent 기능으로 인한, 이벤트 내역을 확인하려 했는데.. 이용자가... 0명... 으로 나와있다. 그럴리 없었다. 구글 플레이 콘솔은 하루 50명 ~ 100명 정도가 다운을 받는다는 기록이 세세히 나와있었기 때문에.. 불가능했다. 이유는 연동이 제대로 되지 않고 있었다는 소리였다.. 예전에 테스트도 해봤었는데.. 무슨 일일까 서둘러 문제법도 검색해보고, 고객센터에도 문의하였다. 그러면서 다른 문제점도 찾게 되었는데, FireBase -> Latest Release로 들어가게 되면, 파이어베이스에서 인식하는 나의 앱 버전이 나오게 되는데, 엥?? 내가 구글 플레이 콘솔..
평소처럼 run버튼을 누르고 앱을 실행했는데, 앱이 켜지지 않는 무반응 상태가 되었다. 디버그 모드로도 실행을 해보니 Waiting for application to come online:~~~~ 이런 글만 나오면서 빨간 에러가 뜨는 것이었다. 구글에 서치 해보니.. Device Manager에 들어가 해당 에뮬레이터를 wipe data 해주라는 것이었다. 아쉽게도 해결이 되지 않았는데, manifest에 들어가서 해당 액티비티에 exported를 true로 바꾸어주니 해결되었다!! 정말 알다가도 모르겠는 안드로이드 스튜디오이다...
지금은 해결되고 캡처한 것이지만, 모든 코드에 빨간줄이 그어졌다... 해결법은... 윈도우나 맥에 사용자 폴더 안에 있는. gradle 폴더를 삭제하고 cleanProject -> RebuildProject -> Invalidate Caches Restart를 해주면 된다!! 그러면. gradle를 처음부터 다시 삭제하고 깔아주면서 해결이 된다. 갑자기 이런 오류가 뜬 요인은 잘 모르겠다.. 만약 위에 방법이 안된다면, 두번째 방법을 사용해보자. 안드로이드 스튜디오를 잠시 꺼주고, 해당 프로젝트 파일 안에 있는 .idea 파일을 삭제하고 다시 실행해본다. 나같은 경우는 두번째 방법으로 해결되었다.
네트워크 통신 즉, 하나의 컴퓨터에서 다른 컴퓨터로 객체를 보낼때 그 자체를 보내는데에는 어려움이 있다. 보낼 객체가 통신이 가능하게 변환해 주어야 하는데 우리는 이러한 작업을 직렬화라고 하고, 이렇게 받은 직렬화된 파일을 다시 객체로 변환해주는 것을 역 직렬화라고 한다. 직렬화에는 여러 종류가 있다. 첫 번째는 gson이다. 간단하게 장점이라면, Json으로 또는 그 반대로 변환 가능한 간단한 메서드인, toJson() 와 fromJson()를 제공 Java Generics의 광범위한 지원 개체에 대한 사용자 지정 표현 허용 등이 있다. 두번째는 moshi 이다. moshi 같은 경우는 Gson이 하지 않는 몇 가지를 최적화 한다고 합니다. 첫번째는 코틀린의 지원 @HexColor int와 같은 한정자..
rxjava와 레트로핏을 다음과 같이 사용하였다. CompositeDisposable 객체를 만들고, 다음과 같이 네트워크를 호출하였다. val disposable = CompositeDisposable() disposable.add( RetrofitClient.getRetrofitInstance(application) ?.getProductList( user?.authCompanyCode, getAuthKey(application), user?.mobileUid, user?.sessionId, pageNo, pageSize, "desc" )?.subscribeOn(Schedulers.newThread()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscrib..
최근에 새로운 앱을 만들기 위해 고군분투 중이다. 기존 앱에 서버에서 받는 api의 원시 데이터는 xml을 사용했는데, 이번 앱은 json을 사용하게 되었다. 다행이 인터넷에 자료가 많아 데이터를 보내는데 문제가 없었다. 그렇지만, 이미지를 보내는 과정에서 어려움이 생겼다. 서버 개발자분이 Multpart를 통해서 서버로 이미지를 보내달라고 요청하셨다. 멀티파트?? 구글에 쳐본 결과 멀티파트란? - HTTP 요청의 한 종류로서 서버에 파일이나 데이터를 보내기 위한 요청 방식이다. - 보통은 큰 용량의 바이너리 데이터 전송에 적합하다. 한마디로 큰 이미지 파일 등을 서버로 넘겨줄 때 적합한 방법이다. 레트로핏을 이용해서 사용해보자 (물론 레트로핏 종속성과 실행법은 모두 알고 있다는 전제로 설명하겠다.) 데..
오늘 회사에서 하루 종일 삽질한 문제이다. 나 같은 경우는 리사이클러뷰 안에 리사이클러뷰를 사용하는 중복 리사이클러뷰를 구현하고 있었는데, 글라이드 라이브러리를 통해서 이미지를 디스플레이하였다. 그런데 문제는 arrayList에서 0인덱스 자리에만 이미지가 출력되면 좋겠지만, 9인 덱스 자리에서도 똑같은 이미지가 출력되는 것이었다. 아이템의 개수를 증가하니, 9 배수 자리의 인덱스 값에서만 같은 이미지가 계속 출력되는 것이었다. 리사이클러뷰 어뎁터를 갱신할 때는 DiffUtil을 사용하고 있었는데, 혹시나 리사이클러뷰가 두 개이니 각각의 리사이클러뷰를 갱신하지 못해서 생긴 문제인가 생각이 들었다. (리사이클러뷰 하나만 갱신을 진행하고 있는 상태) 물론 이게 문제가 아니었다.. 이것 때문에 막혀서 시간을 ..
A 액티비티에서 B 액티비티로 이동하는 중, 다음과 같이 상태 표시줄이 사라지는 상황이 생겨 버렸다. 처음 들어간 화면인 A 액티비티에서는 잘 나오지만, B 액티비티로 이동하면 사라진다. A 액티비티 B 액티비티 알아보니 안드로이드에는 light모드와 dark 모드가 있는데, 그 둘을 구분하기 위한 statusbar 속성을 달아주어야 하는 것이다. theme.xml 이 두개가 있을 텐데, light 모드는 true 이것을 추가해주고 dark 모드는 false로 해준다. false 이렇게 각각 설정해주고 다시 앱을 실행해 보자. 정상적으로 잘 나오는 것을 확인할 수 있다.
오늘 정말 수난시대였다. 물론 내가 릴리즈를 제대로 실행시켜 보지 못하고, (그 전날에 테스트해서 괜찮을 줄 알음) 그대로 올린 것이다.. 결과는.. 로그인이 되지 않는 대형사고를 쳐버린 것이다. 서둘러 아침부터 원인을 찾아 나섰다. 우선 어젯밤 내가 aab 파일이 180mb가 넘어서 구글 플레이 콘솔 정책상 150mb가 넘으면 안 된다는 규칙 때문에, 올리지 못하게 된 것이다. 그래서 다음과 같이 릴리즈 버전에 설정을 달리 하였다. 바로 이 shrinkResources와 minifyEnabled 속성을 true로 바꾸어 주는 것이다. shrinkResources는 드로어블 파일을 전체적으로 축소시켜 주어, 앱의 사이즈를 줄여 주는 역할을 하고, minifyEnabled은 코드를 난독 처리하여, 보안 강..
오늘은 api 서버통신에 대한 글을 작성하려 한다. 참고 자료는 코딩 팩토리님의 영상과 아래 공식 문서를 참고했다. https://flutter-ko.dev/docs/development/data-and-backend/json JSON과 직렬화 어느 시점부터 웹 서버와 통신하지 않거나 구조화된 데이터를 적절하게 보관하지 않는 모바일 앱을생각하기 어려워졌습니다. 네트워크와 연결된 앱을 제작할 때, 결국에는 제법 괜찮은 JSON을사 flutter-ko.dev 우선 이 직렬화를 자동으로 쓰지 않으면 생길 수 있는 문제점에 대해서 설명하겠다. 보통 우리가 서버에서 api를 통해 json 데이터를 받아오는데, 모델 클래스를 만들어 받는 경우가 흔하다. class User { final String name; fi..
오늘 벌써 글만 3개째이다. 공부량이 많은 만큼 좋다고 생각한다. 오늘도 역시 깡샘의 안드로이드를 출처로 한다. 오늘 배울 것은 코틀린의 컬렉션 타입이다. Array - 배열 표현 코틀린의 배열은 Array라고 표현하며, 첫 번째 매개변수는 배열의 크기를 지정하며, 두 번째 매개변수는 초기값을 지정하는 함수이다. (size: Int, init: (int) -> T) 예를 들어 이렇게 선언할 수 있다. val data: Array = Array(3, { 0 }) 배열의 데이터에 접근할 때는 대괄호([])나 set(), get() 함수로 값을 넣어주거나 가져올 수 있다. fun main() { val data1: Array = Array(3, { 0 }) data1[0] = 10 data1[1] = 20 d..
2021.09.29 - [Programing/Android Studio With Kotlin] - Android/ kotlin 코틀린 변수와 함수 정리(1) / 데이터 타입과 문자열, lateinit, lazy등등 # TIL 58 Android/ kotlin 코틀린 변수와 함수 정리(1) / 데이터 타입과 문자열, lateinit, lazy등등 # TIL 58 플러터를 사용하면서 동시에 코틀린을 공부하려고 한다. 하이브리드 앱이 대세라고 하지만, 주 언어로 네이티브를 가져가고 싶은 욕심이 커서 동시에 공부 중이다. 역시 나는 do it 책에서 헤어 daldalhanstory.tistory.com 우선 앞서 공부했던 첫번째 글부터 보고 오시면 이해가 빠르실 겁니다. 두번째 공부내용을 정리해보겠습니다. 저번..
flutter 공부를 하면서, 따로 코틀린을 오랜만에 실행 중에 오류가 발생했다. An exception occurred applying plugin request [id: 'com.android.application'] > Failed to apply plugin 'com.android.internal.application'. > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8. You can try some of the following options: - changing the IDE settings. - changing the JAVA_HOME environment variable. - changing ..
플러터를 사용하면서 동시에 코틀린을 공부하려고 한다. 하이브리드 앱이 대세라고 하지만, 주 언어로 네이티브를 가져가고 싶은 욕심이 커서 동시에 공부 중이다. 역시 나는 do it 책에서 헤어 나오질 못한다.. 너무 정리가 잘되어 있다. 책에서 배운 내용을 정리하고자 한다. 출처는 do it 깡샘의 안드로이드 앱 프로그래밍 with 코틀린에서 가져왔다. 코틀린의 변수와 함수 1. 변수 선언 코틀린에는 크게 두가지의 변수 키워드가 있는데 var(value)와 val(variable)이다. 언뜻 보면 비슷하지만, 둘은 엄연히 다르다. val 같은 경우는 초깃값이 할당 되면 바꿀 수 없는 변수를 선언할 때 사용하고, var는 초깃값을 할당해도 추후에 바꿀 수 있는 변수를 선언할 때 사용한다. 코드는 아래와 같다..
오늘은 이미지 크롭 기능을 구현해 보려고 한다. 여러 크롭 라이브러리들이 있지만, 나는 이 라이브러리가 제일 심플한 것 같아서 사용을 해보았다. https://github.com/lyrebirdstudio/Croppy lyrebirdstudio/Croppy Image Cropping Library for Android. Contribute to lyrebirdstudio/Croppy development by creating an account on GitHub. github.com 이런 식으로 크기 영역을 원하는 식으로 조정할 수 있다는 장점을 가지고 있다. 한번 손쉽게 구현해보자. 우선 종속성을 넣어주자. 위에 사이트에 나와있는 대로 종속성을 추가해준다. 나도 아직 초보라서 잘 모르겠지만, 이렇게 종..
이번에도 정대리님의 강의를 보고 공부한 자료입니다. 출처를 남깁니다. https://www.youtube.com/channel/UCutO2H_AVmWHbzvE92rpxjA 개발하는 정대리 한국에서 개발자로 살아남기! 예전에 저처럼 프로그래머가 되고 싶지만 그 길을 몰라 해매는 분들에게 도움 되고자 이 채널을 운영하기 시작했습니다. 프로그램에 관심 있는 분들이나 취업 준 www.youtube.com 비동기 프로그래밍이란 무엇인가?,,, 나중에 배워야지 나중에 배워야지 하면서, 계속 미루어두었던 개념이다. 어쩌면 이번 기회에 어느 정도 단디 배우고 가야겠다. 우선 간단히 말하자면, 동기란, 서버에 만약에 api를 요청하여 데이터를 받아올 때, A 작업을 다 완료해야지 B작업으로 넘어갈 수 있는 방식, 한마디..
미리 출처를 남깁니다. 요즘 개발하는 정대리님의 유익한 유튜브를 보면서 코틀린을 익히는 중입니다. 항상 감사합니다. 출처 https://www.youtube.com/channel/UCutO2H_AVmWHbzvE92rpxjA 개발하는 정대리 한국에서 개발자로 살아남기! 예전에 저처럼 프로그래머가 되고 싶지만 그 길을 몰라 해매는 분들에게 도움 되고자 이 채널을 운영하기 시작했습니다. 프로그램에 관심 있는 분들이나 취업 준 www.youtube.com 해결법 사실 직접적인 이해보다는 스택 오버 플로우에서 가져온 코드를 그대로 사용했다는 점이 크기 때문에 자세히 코드에 대해 이해하지는 못하고 있다. 중요한 흐름만 파악해놓은 상태에서 코드에 간략한 소개만 하겠다. 정대리님의 영상을 보고 나서, X, Y, Z 축..
여느때와 다르지 않게 코드 작성 후 깃허브에 Push를 하는데, 갑자기 422 unprocessable entity - repository creation failed. [repository; description]custom: description control characters are not allowed 이러한 오류가 떴다. 내용으로 번역해보자면, 저장소에 "_" 이러한 문자를 쓰지 말라는 것 같아서, "_" 이 문자를 지워보니 해결되지 않았다.(레퍼지토리 제목을 Study_Sooyeol 이런식으로 했기 때문) 구글링을 해보니 바로 해결되는 사람도 있다고 한다. 어쩌면 좋을 지 생각 해보다가 알아낸 방법은 "_" 이러한 문자를 지우고, 맥은 Preferences로 윈도우는 settings로 들어가..
정말 오랜만에 글을 쓰게 된다. 취업하게 되면서 해야 할 것도 많고 이것저것 배우느라 정신이 없어, 집에 돌아와 작업을 하면서 이렇게 개인적인 공부 여유가 없어서ㅠㅠ 최근에 너무 힘들었지만, 이럴수록 더욱 짬 내서 내가 공부한 내용들을 기록해야 한다고 생각이 들었다. 정말 기억보단 내가 남겨놓았던 기록들이 더 장기기억으로 이어질 가능성이 있고, 궁금할 때 바로바로 찾아볼 수 있어서 장점이 많은 것 같다고 생각이 든다. 오늘은 인스타그램에 하트 기능을 애니메이션 형식으로 구현하는 방법에 대해서 알아보고자 한다. https://www.youtube.com/watch?v=1uOvP-6vpKU&list=PLgOlaPUIbynrDSTJxS8AaE-2zYvPCjWtF&index=7 개발자 정대리님의 영상을 참고하였..
자주자주 사용하는 것들은 정말 나 또한 자주자주 적고 있다. 그 예를 든 것이 뷰 페이저와 리사이클러뷰인데, 최근에 코틀린 버전으로 뷰 페이저를 썼고, 저 두 가지는 이미 자바로 배운 것을 정리했다. 지금은 처음으로 코틀린으로 리사이클러뷰 사용법을 적어보려고 한다. 언어가 바뀌어도 어느 정도 이해를 해야 하는데, 내가 자바를 사용할 때도, 그리 리사이클러뷰에 대해서 잘 이해하지 못하고 넘어간 것 같다. 그래도 지금은 조금 진전이 있는 상태에서 리사이클러뷰(코틀린 버전)를 정리해보려고 한다. (홍드 로이드 님의 영상을 보고 참고했습니다.) 우선 라이브러리를 추가해주세요. dependencies { implementation "androidx.recyclerview:recyclerview:1.1.0" // ..
뭔가 자바를 배울때 기초부터 배우는 느낌을 느껴보는거라 재밌다. 오늘은 코틀린으로 화면전환(Intent)를 배워보겠다. 인텐트 이제부터 코틀린에서 사용하는 뷰바인딩에 대한 설명은 하지 않겠다. 매번 뷰바인딩을 하고 있으니, 모르시는 분들은 코틀린 카테고리를 확인해보면 알 수 있다. 우선 메인액티비티와 서브액티비티를 만들겠다. 누가 봐도 왼쪽이 메인이고, 오른쪽이 서브이다. 메인에서 서브로 인텐트를 해보겟다. 자바랑 별차이는 없다. 다음은 메인액티비티의 코틀린 코드이다. class MainActivity : AppCompatActivity() { private var mbinding : ActivityMainBinding? = null private val binding get() = mbinding!! ..
회사를 다니고 나서, 매일 늦게 들어오지만, 별것 아닐지라도 족므이라도 배운 기록을 하나라도 남기려고 노력중이다. 오늘은 시간이 없어서 TextView를 간단히 활용하는 법만 올린다. 안 그래도 현재 코틀린으로 뷰페이저를 만지고 있는 상황인데, 서버에서 데이터를 받는 부분이 살짝 어렵다. 그래도 나는 해낼 것이라고 믿는다. 우선, setText를 한번 봐보자. 사용법 오늘 해볼 것은 간단하다. EditText안에 글자를 버튼을 누를때 값을 가져오고, 그 가져온 값을 TextView에다가 나타내는 아주 간단한 예제이다. java에서는 쉽겠지만, 나같은 코틀린 초보자는 어떻게 해야할지.. 이렇게 하는건가? 할 수 도 있으니 살펴보자. 우선 뷰 바인딩을 통해 손 쉽게 뷰들을 참조할 수 있었다. package ..
회사를 다니니 피곤해서 집에 오면 자고 싶고.. 그러지만.. 발전을 위해서 계속 초심을 가지고 정진을 해야 할 것이다. 아직은 코틀린에 대해서 부족한 것이 많아서, 자바를 처음 배웠을 때 마음가짐으로 임하려고 한다. 오늘은 findViewById로 항상 id값을 참조하여 자바 코드를 작성하였는데, 이제 효율성을 위해 코틀린 코드를 이용해서 뷰 바인딩을 사용해 보려고 한다. 사실 자바 코드를 사용할 때, 접해보려 했건만, 당시엔 취업이 우선시 했던지라, 그러한 퀄리티는 신경 쓰지 못한 것 같다. 우선 다음을 보자. 뷰 바인딩 https://duckssi.tistory.com/42 [Android Kotlin] View Binding ( 뷰 바인딩 ) 네 여러분들 안녕하십니까 홍 드로이드 입니다 :) 이번 ..
취업을 하고 나서 여러 가지를 배우며 블로그에 정리를 하고 있다. 깊게 배우지 못하고, 얕게 배우지만, 이 마저도 정리하기 위해 글을 쓴다. 부족한 설명은 이해해주길 바란다. FCM이란 앱을 사용하는 이용자에게 포그라운드나 백그라운드 상태에서 (포그라운드 : 앱이 실행중인 상태) (백그라운드 : 앱이 꺼진상태) 원하는 메시지를 전달하기 위한 방법이다. 예전에는 GCM이라고 구글에서 제공하는 클라우드 메세징이 있었다는데, 이 FCM으로 대체되었다고 한다. FCM에는 두 가지 형태가 있는 데 하나는 Notification이고, 하나는 data이다. 두가지 차이점은 아래와 같다. * 전자는 앱이 실행 중(포그라운드) 일 때만 푸시 알림이 오고, * 후자는 실행 중이거나 백그라운드(앱이 실행 중이지 않을 때) ..
첫 출근을 하고 드디어 과제를 받게 되었는데, 바로 스와이프 기능을 구현하는 것이다. 자바로는 뷰 페이저 2를 프래그먼트와 사용했지만, 이제는 코틀린으로 사용해야한다. 어디 한번 코틀린으로 사용하는 법을 알아보자. 해결책 https://todaycode.tistory.com/26 코틀린 viewPager2 : 사용법, 애니메이션 등 1. viewPager2 1-1. viewPager란? 1-2. viewPager의 활용 2. 사용 방법 2-1. 기본 사용법 2-2. 애니메이션 설정 2-3. 여백 설정 1. viewPager2 1-1. viewPager란? 페이지를 넘기듯이 이렇게 슉-슉- 넘.. todaycode.tistory.com 대부분에 자료는 이 곳에서 알게 되었으므로, 출처를 남기겠습니다. 우선..