안드로이드/에러 20

[Android] ArrayList에서 ConcurrentModificartionException 발생

ArrayList에서 add와 remove가 동시에 발생하면서 ConcurrentModificartionException가 발생 하였다.ConcurrentModificationException은 여러 스레드가 동시에 리스트를 수정하려고 할 때 발생해결 방안1. Collections.synchronizedList 사용동기화된 리스트를 생성할 수 있습니다. 이 리스트는 모든 접근이 동기화되어 있어 여러 스레드가 동시에 접근해도 안전합니다.val syncList = Collections.synchronizedList(mutableListOf())synchronized(syncList) { // 리스트에 요소 추가 syncList.add("example") // 리스트에서 요소 제거 syn..

[Android] Gson으로 데이터를 가져오지 못할 때 (코드 난독화)

Gson라이브러리를 이용하여 데이터를 가져왔는데 코드 난독화를 하면 에러가 발생하면서 앱이 종료 되었다. java.lang.NullPointerException: throw with null exception at package.Response$b.hashCode(Unknown Source:3) 1) 해당 data쪽 모델을 keep class로 난독화 해제를 해주었지만 에러남 2) 찾아보니 gson.fromJson이 일을 제대로 하고 있지 않다고 한다. 해결방법 1) gradle.properties파일을 열고 android.enableR8=false 2) proguard-rules.pro 파일에 R8 방지 코드를 추가. -keepclassmembers,allowobfuscation class * { @c..

binding시 release 모드에서 에러가 발생할 때

릴리즈모드 바인딩 에러와 관련하여 몇 가지 테스트를 통해서 내용 정리를 했습니다. 1. Release 모드에서 VIewBinding class를 찾지 못해서 에러가 발생 -> 왜 찾지 못할까? ... 최적화(minifyEnabled)옵션이 true이면 binding 파일이 사라진다. 2. 최적화에서 binding 파일이 사라지지 않으려면 어떻게 해야 할까? -> layout 태그를 명시적으로 추가하거나, binding 파일을 사용하는 화면에서 binding에 실제 접근을 하면 된다. 결론 : layout 태그도 없고, Fragment 소스상에서 binding에 접근도 하지 않아 최적화 과정에서 참조 없는 클래스로 판단, 자동으로 삭제되어 문제가 발생. 앞으로, layout 태그를 명시적으로 추가하자!!!..

[Android] 프래그먼트 빈생성자가 없어서 생긴 문제 ContextAwareHelper

프래그먼트 빈생성자가 없어서 생긴 문제 - 다이얼로그 띄워놓고 화면 리사이즈하니 Exception 발생 접근방법 : 프래그먼트 빈생성자가 없어서 생긴 문제 같다로 접근 제이씨가 맵핑파일을 전달해주어 난독화를 풀어서 확인을 해보기로 접근. 맵핑된 파일에서 oi.b → 로 검색을 하면, 어떠한 클래스로 맵핑 되는지 알 수 있다고 함. 디버깅하고있는 APK 버전에서 역추적을 해야한다고 함.(계속 바뀌기 때문) CustomProgressDialog를 발견했고, DialogFragment()를 상속받고 있음. 테스트 방법 아무곳에 CustomProgressDialog에 파라미터가 있는 생성자로 테스트 다른앱들을 25개넘게 사용 나중에 확인했지만 다이얼로그 띄워놓고 화면 리사이즈하니 동일한 이슈 발생 원인 프래그먼..

웹뷰에서 base64 이미지 받을때 에러 (ScopeStorage Primary directory)

ScopeStorage Primary directory Download not allowed for media 웹뷰에서 받은 이미지-> base64 String값을 이미지 저장하려고 한다. 해결방법 base64 String 값을 비트맵으로 만든 뒤에 -> jpg or png로 변환하여 저장하는 방법. (올바른 방법이 아닐 수도 있음) Android는 Q버전 이상부터 ScopeStorage가 적용되었다. 나는 Q버전 이상과 Q버전 미만으로 나누어 파일 저장을 하였습니다. 이전글에 저장공간에 대해 적어둔 것이 있습니다. 저장공간 정의 저장 폴더 Q버전 이상 : [외부-공용] Download/앱이름 폴더 Q버전 미만 : [외부-공용] Download/앱이름 폴더 에러 발생 Primary directory Do..

[Android] Fragment 에서 ActivityResultLauncher 사용시 앱 죽는 문제

ActivityResultLauncher 사용시 앱 죽는 문제 You must ensure the ActivityResultLauncher is registered before calling launch 가 발생하면서 앱이 죽는 이슈가 생겼다. # 상황 뷰페이저 - [홈], [죽는화면], [다른 화면], [다른 화면2] [죽는 화면]에서 첫 진입시 ActivityResultLauncher를 통해 가이드 화면으로 이동 시켜주어야 함. [다른화면2] -> [죽는화면]으로 이동시 앱 죽음. = 아마 [다른화면2] 갔을 때 [죽는화면]이 destroy되고 ActivityResultLauncher가 초기화 되지 않아서 죽는 것 같다. # 해결 onDestroy()에 ActivityResultLauncher 변수를..

Hilt 의존성 주입과 Fragment 문제

Hilt 의존성 주입과 Fragment를 같이 사용한다면 setRetainInstance() 사용하면 안됩니다 setRetainInstance() 를 사용하게되면 구성이 변경되어도 Fragment의 인스턴스가 유지되어 Hilt사용시 생성되는 Hilt_MyFragment.java ->onAttach() -> Preconditions.checkState() 에서 throw 될 수밖에 없습니다. Activity의 바인딩이 완료되기 전에 fragment의 onViewCreated() -> initializeViews() -> RequiredActivity() as ... 가 호출됨 Activity를 바인딩할 때 Inflate 과정에서 fragment를 바인딩하게되는데 이 때 Activity의 바인딩이 끝나지 않..

GoogleCloud Speech (STT)에러

처음 구현했을 때에는 되었는데 갑자기 안된다.. 1. https://stackoverflow.com/questions/64668851/why-the-firestore-isnt-working-on-android-studio io.grpc:grpc-okhttp:1.10.0 → io.grpc:grpc-okhttp:1.32.2 2. google-cloud-speech → google-cloud-speech:1.29.1로 올려봄. 3. gradle library 버전을 바꾸면서 각각 제공하지 않는 메소드가 잇는것 같다… 많이 사용하는 것 같은 버전 적용. https://mvnrepository.com/artifact/com.google.cloud/google-cloud-speech https://mvnreposi..

SimpleCall (카카오엔터 SDK) & STT문제

1. 안드로이드 내부 API - SpeechRecognizer를 통해 STT테스트를 해보았습니다. 통화중이 아닐 때에는 마이크로 전달한 음성이 제대로 인식이 되는데 통화중일때에는 SpeechRecognizer.ERROR_NO_MATCH라는 에러가 발생합니다. 통화중 아닐 때 계속 내부적으로 입력 받는것을 인식 통화중일 때 onRmsChanged가 한번만 불리면서 몇초 뒤에 onError 7이 떨어집니다. AudioFocus 처음에 통화 연결되면 -2로 AUDIOFOCUS_LOSS_TRANSIENT로 되고 그뒤에 통화를 종료하면 AUDIOFOCUS_REQUEST_GRANTED로 변함. 2. 구글 클라우드 API 이것도 통화중이 아닐 때에는 음성이 제대로 인식 & 인식 끝이 제대로 되는데 통화중일때에는 마이..