Hilt를 사용하면서 만난 오류이다.
error: [Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method. public abstract static class SingletonC implements ArtOnApplication_GeneratedInjector,
에러가 난 코드는 아래와 같다.
class KakaoAuthService @Inject constructor(
@ActivityContext private val context: Context
) {
fun startKakaoLogin(kakaoLoginCallback: (OAuthToken?, Throwable?) -> Unit) {
val kakaoLoginState = if (UserApiClient.instance.isKakaoTalkLoginAvailable(context)) {
KAKAO_TALK_LOGIN
} else {
KAKAO_ACCOUNT_LOGIN
}
when (kakaoLoginState) {
KAKAO_TALK_LOGIN -> UserApiClient.instance.loginWithKakaoTalk(
context,
callback = kakaoLoginCallback
)
KAKAO_ACCOUNT_LOGIN -> UserApiClient.instance.loginWithKakaoAccount(
context,
callback = kakaoLoginCallback
)
}
}
companion object {
const val KAKAO_TALK_LOGIN = 0
const val KAKAO_ACCOUNT_LOGIN = 1
}
}
ActivityContext를 사용하는 부분에서 오류가 난 것인데, ActivityContext의 경우 @Provide 를이용해서 의존성을 주입하라는 것 같다. Stack Overflow를 통해 비슷한 오류를 찾아봤는데
@HiltViewModelViewModel이 구성 변경의 활동보다 오래 지속되기 때문에 누출이 발생할 수 있으므로 활동 컨텍스트(또는 활동 자체)를 삽입할 수 없습니다. (구글 번역기..)
대략 ActivityContext의 생명주기 보다, ViewModel의 생명주기가 더 길기 때문에 의존성 주입이 불가능하다.. 라고 하는 것 같다.
나의 경우 ActivityContext가 아닌, ApplicationContext를 이용해도 상관없어 보여서 ApplicationContext을 주입하도록 코드를 수정해주니 정상적으로 빌드되었다.
class KakaoAuthService @Inject constructor(
@ApplicationContext private val context: Context
)
다른 좋은 방법이 있다면 공유 부탁드립니다..😜
'Android' 카테고리의 다른 글
Error inflating class com.google.android.material.bottomnavigation.BottomNavigationView (0) | 2022.11.13 |
---|---|
android studio에서 실행한 앱이 설치되지 않을 때 (0) | 2022.11.06 |
Android WebView 테스트 샘플 앱 개발 - 2 (0) | 2022.10.22 |
Android WebView 샘플 앱 개발 - 1 (0) | 2022.10.22 |
Android에서 Firebase Cloud Messaging 테스트 앱 개발 - 1 (0) | 2022.10.19 |