네이버 SDK를 안써봐서 자세한 것은 모르겠지만, 코드에서 한가지 의문이 드는 점은
binding.naverLoginButton.setOnClickListener {
mOAuthLoginModule = OAuthLogin.getInstance()
mOAuthLoginModule.init(
this,
"NAVER_CLIENT_ID",
"NAVER_CLIENT_SECRET",
"NAVER_CLIENT_NAME"
)
}
mOAuthLoginModule.startOauthLoginActivity(this, mOAuthLoginHandler);
}
왜 OAuthLoginModule을 버튼을 누를 때마다 초기화를 하고 계시죠?
보통 저런 라이브러리는 어플리케이션이 실행될 때 Application 클래스 안에서 한번만 초기화를 하도록 할겁니다.
private val mOAuthLoginModule by lazy {
OAuthLogin.getInstance().also { authModuel ->
authModuel.init(
this,
"NAVER_CLIENT_ID",
"NAVER_CLIENT_SECRET",
"NAVER_CLIENT_NAME"
)
}
}
binding.naverLoginButton.setOnClickListener {
mOAuthLoginModule.startOauthLoginActivity(this, mOAuthLoginHandler);
}
그리고 Button ClickListener의 코드의 scope 약간 이상합니다.
binding.naverLoginButton.setOnClickListener {
mOAuthLoginModule = OAuthLogin.getInstance()
mOAuthLoginModule.init(
this,
"NAVER_CLIENT_ID",
"NAVER_CLIENT_SECRET",
"NAVER_CLIENT_NAME"
)
} //Endof naverLoginButton.setOnClickListener
mOAuthLoginModule.startOauthLoginActivity(this, mOAuthLoginHandler);
}
private val mOAuthLoginHandler: OAuthLoginHandler = ...
mAuthLoginHandler는 onCreate 다음에 초기화되는 것인지 아닌지 헷갈려요. 그렇다면 당연히 NullPointer가 되겠죠.