- 목차
Data binding
[Error] is not abstract and does not override abstract method
<에러문의 형식> (귀찮아서 패키지와 소스명은 밝힌다.)
error: FragmentConfirmBindingImpl is not abstract and does not override abstract method setFr_event(ConfirmFragment.ConfirmFragmentEvent) in FragmentConfirmBinding
error: cannot find symbol variable mFrEvent
-
데이터 바인딩 대상 Java : ConfirmFragment.java
-
xml 파일 이름 : fragment_confirm.xml
-
Binding 변수이름 : FragmentConfirmBinding
-
빌드 후 생성되는 코드 : FragmentConfirmBindingImpl
-
xml에 선언한 데이터를 저장하기 위한 세터 : setFr_event(ConfirmFragment.ConfirmFragmentEvent)
-
xml 내부의 데이터 선언 방식
<data>
<variable
name="fr_event"
type="패키지 주소.ConfirmFragmentEvent" />
</data>
계속 빌드가 안되서 stackoverflow 찾아봐도 “Gradle 설정 하세요, Java에서 변수 명 바꾸세요.” 같은 개소리 밖에 없었음 xml의 variable의 name을 변경해보자 하고 생각해서 변수를 “fr_event” -> "fr"로 변경해봄
갑자기 빌드가 된다…
다른 변수명으로 바꾸어서 디버깅 해보니 언더바 “_” 이녀석이 들어가면 빌드가 되지 않는다.
※ 임의로 다른 프로젝트에서 생성 후 테스트 해보니 (정말 짜증날 정도로) 멀쩡하게 잘된다.
아무래도 데이터 바인딩을 이용할 때는 첫 단추의 중요성이 매우 크다.
(Invalidate cache, Clean project가 잘 안먹힌다. 몇 년전에 안드로이드 스튜디오를 다시 설치 하기도 했다.)
[Error] 아무 이유 없는 갑작스러운 빌드 에러
잘 되는 것이 갑자기 안되는 경우도 있다. 심지어 R error도 동반하기도 한다.
기본적으로 안드로이드 클리닝 명령 3종 세트 (Invalidate Caches / Restart, Clean Project, Rebuild Project)
를 실행해도 안되는 경우도 존재한다.
해결방법으로는 xml의 view id 값을 변경하는 방법이 있다. (Refactoring 기능에 취약한 Data binding에서는 권장하고 싶지는 않다.)
그리고 최근에 발견한 방법으로는 Gradle 설정을 건드리는 것인데, build.gradle (Project:Project)에서 gradle 버전을 다운그레이드 하거나, sdk를 다시 설치하거나(Sdk build tool) 버전을 변경하는 것이다.
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000008
-
참고 링크 2 : https://dark0946.tistory.com/340
-
발생한 부분 1 : inputstream이 close 이거나 null 임에도 불구하고 접근할 경우 (try catch에 걸리지도 않는다…)
-
발생한 부분 2 : 이미 null 처리된 handler에 SendMessage 시도
본인의 경우에는 화면 Rotation시 View를 다시 그려야해서 onDestroy를 호출할 수 밖에 없었는데, 이 과정에서 스레드가 제대로 종료되지 않아서 발생함.
XML Rendering problem
- 방법 1. ID나 Attribute의 철자가 맞는지 확인 (대소문자 구분 하니까 잘 봐야한다.)
- 방법 2. gradle 설정에서 안드로이드 서포트 라이브러리의 버전을 다운그레이드 한다. (이를 위해서는 compileSdkVersion도 같이 낮추어야한다.
댓글
댓글 쓰기