i have a movie app in which you can play videos in YoutubePlayer library. This app uses Jetpack compose for ui but when i click on a video it goes to the specified Screen with the correct videoKey and play the video without problem but when i try to play another video it throws this exception(it does not happen the first time or sometimes second time) :
FATAL EXCEPTION: main
Process: com.farzin.imdb, PID: 17832
android.net.ConnectivityManager$TooManyRequestsException
at android.net.ConnectivityManager.convertServiceException(ConnectivityManager.java:4032)
at android.net.ConnectivityManager.sendRequestForNetwork(ConnectivityManager.java:4221)
at android.net.ConnectivityManager.registerDefaultNetworkCallbackForUid(ConnectivityManager.java:4750)
at android.net.ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.java:4717)
at android.net.ConnectivityManager.registerDefaultNetworkCallback(ConnectivityManager.java:4691)
at com.pierfrancescosoffritti.androidyoutubeplayer.core.player.utils.NetworkObserver.doObserveNetwork(NetworkObserver.kt:76)
at com.pierfrancescosoffritti.androidyoutubeplayer.core.player.utils.NetworkObserver.observeNetwork(NetworkObserver.kt:31)
at com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.LegacyYouTubePlayerView.initialize(LegacyYouTubePlayerView.kt:102)
at com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView.<init>(YouTubePlayerView.kt:90)
at com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView.<init>(YouTubePlayerView.kt:33)
at com.farzin.imdb.ui.screens.play_video.VideoPlayerScreenKt$VideoPlayerScreen$1$1.invoke(VideoPlayerScreen.kt:28)
at com.farzin.imdb.ui.screens.play_video.VideoPlayerScreenKt$VideoPlayerScreen$1$1.invoke(VideoPlayerScreen.kt:27)
at androidx.compose.ui.viewinterop.ViewFactoryHolder.<init>(AndroidView.android.kt:337)
at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1.invoke(AndroidView.android.kt:271)
at androidx.compose.ui.viewinterop.AndroidView_androidKt$createAndroidViewNodeFactory$1.invoke(AndroidView.android.kt:270)
at androidx.compose.ui.viewinterop.AndroidView_androidKt$AndroidView$$inlined$ComposeNode$1.invoke(Composables.kt:254)
at androidx.compose.runtime.ComposerImpl$createNode$2.invoke(Composer.kt:1610)
at androidx.compose.runtime.ComposerImpl$createNode$2.invoke(Composer.kt:1608)
at androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke(Composer.kt:3546)
at androidx.compose.runtime.ComposerImpl$recordInsert$2.invoke(Composer.kt:3543)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:818)
at androidx.compose.runtime.CompositionImpl.applyChanges(Composition.kt:849)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:625)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:537)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1229)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1239)
at android.view.Choreographer.doCallbacks(Choreographer.java:899)
at android.view.Choreographer.doFrame(Choreographer.java:827)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1214)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7872)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
here is where i navigate to VideoScreen :
LazyRow(
modifier = Modifier
.fillMaxWidth()
) {
items(videosList) {
VideoItem(
poster = poster,
title = it.name ?: "",
type = it.type ?: "",
onClick = {
navController.navigate(Screens.Video.route+"?key=${it.key}")
}
)
}
}
here is the VideoScreen composable :
@Composable
fun VideoPlayerScreen(key: String, navController: NavController) {
val ctx = LocalContext.current
val coroutine = rememberCoroutineScope()
val view = YouTubePlayerView(ctx)
AndroidView(factory = {
view.addYouTubePlayerListener(
object : AbstractYouTubePlayerListener() {
override fun onReady(youTubePlayer: YouTubePlayer) {
super.onReady(youTubePlayer)
youTubePlayer.loadVideo(key, 0f)
}
}
)
view
})
BackHandler {
view.release()
navController.popBackStack()
}
}
as you can see i have tried adding view.release()
when getting out of the screen but I still get the same error(I think this error is because the previous session is still open but I'm not sure). I would appreciate any help.