회사에서 개발하고 있는 어플리케이션에 mvvm 아키텍처를 적용하면서 여러 시행착오를 겪고있는데, 이번에 해결한 문제가 가장 어이없고 짜증났던 것 같다.
기존의 백그라운드 서비스와 액티비티 간의 통신 방식을 브로드캐스트에서 event bus로 바꾸기 위해 코드를 수정하였다. 필요없는 코드들을 다 지우고 빌드를 해봤더니 error: cannot find symbol method setModel(BleServiceViewModel) 이 에러가 발생하는거다... 그래서 다른 부분에 문제가 있겠거니 해서 다른거 하고 다시 빌드했더니 같은 오류...
(에러가 발생하는 코드)
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mFeatureFragBinding = FeatureFragBinding.inflate(inflater, container, false);
mBleServiceViewModel = FeatureActivity.obtainBleServiceViewModel(getActivity());
mFeatureFragBinding.setViewModel(mBleServiceViewModel);
return mFeatureFragBinding.getRoot();
}
도저히 뭐가 문제인지 몰라 구글링도 해보고 같은 프로그램의 정상 작동하는 다른 view-viewmodel 코드와 비교해도 오류가 발생할 껀덕지를 못 찾겠더라... 그렇게 몇 일을 날리다가 xml에서 class 이름을 커스터마이징했더니 깔끔하게 동작한다. 에러에 대한 힌트도 없고, 자료도 없고, 심지어 내가 뭘 잘못한 것도 아니라 해결을 하고도 굉장히 허무한 것 같다.
(해결)
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:bind="http://schemas.android.com/apk/res-auto">
<data class="FeaturesFragBinding">
<variable
name="viewmodel"
type="com.example.viewmodel.BleServiceViewModel" />
</data>
...
</layout>
정리
1. 코드를 수정하다보니 어느 순간 error: cannot find symbol method setModel(BleServiceViewModel)라는 오류 발생
2. Clean Project, Invalidate Caches & Restart, 프로그램 재시작 등을 해도 에러 발생
3. 코드에는 문제가 없음
4. generated databinding 클래스 이름 커스터마이징해주니 해결
가장 찝찝한건 원인을 알 수 없다는거다... 아마 라이브러리 자체의 문제 같은데
'안드로이드' 카테고리의 다른 글
안드로이드 view childs 순회 (0) | 2018.08.20 |
---|---|
[링크] 안드로이드 fragment를 사용하는 이유 (1) | 2018.08.12 |
Nordic Android BLE Library 정리 (0) | 2018.07.24 |
안드로이드 커스텀 Logger (0) | 2018.07.17 |
Invoke-customs are only supported starting with Android O--min-api 26 (0) | 2018.07.15 |