Androidアプリ IllegalStateExceptionエラーについて
解決したいこと
※今回初めての投稿となります。不備等あればご指摘いただけますと幸いです。
現在、KotlinでAndroidアプリを作成、PlayStoreで配布しています。
アプリ起動時にプライバシーポリシーへの同意画面を表示するようになっていますが、表示中にアプリが落ちます。
この原因を突き止めたいと考えております。
分かっていること
・この現象は必ず起きるわけではなく、同型番、同OSバージョンで再現するスマホとしないスマホがあります。また、開発機として手元にあるスマホでは再現しません。
・この現象はAndroidOSバージョン11,13,14で起きています。
・アプリをアンインストールして、再度インストールしても改善しません。
発生している問題・エラー
以下のログはPlayConsoleの「クラッシュとANR」から取得したものです。
Exception java.lang.IllegalStateException:
at androidx.fragment.app.Fragment.getParentFragmentManager (Fragment.java:1107)
at androidx.navigation.fragment.NavHostFragment$Companion.findNavController (NavHostFragment.kt:375)
at androidx.navigation.fragment.FragmentKt.findNavController (Fragment.kt:29)
at [パッケージ名].ui.privacy.PrivacyPolicyAgreementFragment$onResume$1.invokeSuspend (PrivacyPolicyAgreementFragment.kt:201)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.kt:106)
at android.os.Handler.handleCallback (Handler.java:942)
at android.os.Handler.dispatchMessage (Handler.java:99)
at android.os.Looper.loopOnce (Looper.java:240)
at android.os.Looper.loop (Looper.java:351)
at android.app.ActivityThread.main (ActivityThread.java:8411)
at java.lang.reflect.Method.invoke
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:568)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1013)
該当するソースコード
クラッシュログ中のPrivacyPolicyAgreementFragment.ktから抜粋しています。
既にプライバシーポリシーに同意済みかチェックし、同意済みならログイン画面へ遷移するようにしています。
override fun onResume() {
super.onResume()
pref = Pref(requireContext())
(activity as MainActivity?)!!.enableBottomBar(false)
(activity as MainActivity?)?.visibletoolbar(false)
suspend fun res():Boolean =
withContext(Dispatchers.Default)
{
var b = false
PrivacyVersion?.let { p ->
try{
var privacy = db.dao_privacy.get()
if(privacy.agree && p == privacy.version){
b = true
} else {
}
}
catch (e:Exception){
Log.v("VersionUpdate", e.message.toString())
}
}
return@withContext b
}
GlobalScope.launch(Dispatchers.Main)
{
var b = res()
if(b){
if (findNavController().currentDestination?.id == R.id.nav_privacy) {
var action = PrivacyPolicyAgreementFragmentDirections.actionNavPrivacyToNavLogin()
findNavController().navigate(action)
}
}
}
}
クラッシュログから下記の部分でエラーが出ているように考えております。
※現在の画面がプライバシーポリシー同意画面かをチェックしています。
if (findNavController().currentDestination?.id == R.id.nav_privacy) {
この部分でエラーとなる際の原因として何が考えられるかを知りたく、
お力をお借りできますと幸いです。よろしくお願いいたします。