회사에서 개발하고 있는 어플리케이션에 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 클래스 이름 커스터마이징해주니 해결


가장 찝찝한건 원인을 알 수 없다는거다... 아마 라이브러리 자체의 문제 같은데

블로그 이미지

NCookie

,