I'm trying to build a movie app, in which there will be reviews and ratings of other users stored on firebase realtime database.
The idea is whenever the user open a movie, my app will query all the ratings of that movie with a given movieId  by iterating through its child nodes.
Here is the code to get data from firebase.
fun getAllRating(movieId : String) : MutableLiveData<RatedMovie>{
        var userRating: MutableLiveData<RatedMovie>? = null
        val ratingRef : DatabaseReference = firebaseDatabase.reference.child("RatedMovie").child(movieId)
        Timber.d(movieId)
        ratingRef.addValueEventListener( object : ValueEventListener{
            override fun onDataChange(snapshot: DataSnapshot) {
                Timber.d("start getting ratings")
                for (dataSnapshot : DataSnapshot in snapshot.children) {
                    var userId : String = dataSnapshot.key.toString()
                    Timber.d(userId)
                    //getting user info from user node with userId stored in RatedMovie node
                    var userRef : DatabaseReference = firebaseDatabase.reference.child("User").child(userId)
                    var username =
                        userRef.child("firstname").get().toString() + " " + userRef.child("lastname").get().toString()
                    Timber.d(username)
                    var userImage =
                        userRef.child("avatar_uri").get().toString()
                    Timber.d(userImage)
                    var ratingScore = dataSnapshot.child("ratingScore").value.toString()
                    Timber.d(ratingScore)
                    var comment = dataSnapshot.child("comment").value.toString()
                    Timber.d(comment)
                    userRating?.value = RatedMovie(username,userImage,ratingScore,comment)
                    Timber.d(
                        "%s %s %s %s",
                        userRating?.value?.username.toString(),
                        userRating?.value?.userImage.toString(),
                        userRating?.value?.ratingScore.toString(),
                        userRating?.value?.comment.toString()
                    )
                    return
                }
            }
            override fun onCancelled(error: DatabaseError) {
                Timber.d(error.toString())
            }
        })
        return userRating!!
    }
I have created checkpoints with the log and according to them, the function can only get to the log showing the movieId .
This is the error log.
2021-08-20 16:42:47.742 2084-2084/com.group1.movieapplication D/--: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2021-08-20 16:42:47.743 2084-2084/com.group1.movieapplication D/--: │ Thread: main
2021-08-20 16:42:47.743 2084-2084/com.group1.movieapplication D/--: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2021-08-20 16:42:47.743 2084-2084/com.group1.movieapplication D/--: │ MovieDetailFragment.onViewCreated  (MovieDetailFragment.kt:56)
2021-08-20 16:42:47.743 2084-2084/com.group1.movieapplication D/--: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2021-08-20 16:42:47.743 2084-2084/com.group1.movieapplication D/--: │ tt6264654
2021-08-20 16:42:47.743 2084-2084/com.group1.movieapplication D/--: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: │ Thread: main
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: │ MovieDetailViewModel.getAllRating  (MovieDetailViewModel.kt:53)
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: │ tt6264654
2021-08-20 16:42:47.754 2084-2084/com.group1.movieapplication D/--: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2021-08-20 16:42:47.756 2084-2128/com.group1.movieapplication I/okhttp.OkHttpClient: --> GET https://imdb-api.com/en/API/Title/k_579ho6ea/tt6264654
2021-08-20 16:42:47.756 2084-2128/com.group1.movieapplication I/okhttp.OkHttpClient: --> END GET
2021-08-20 16:42:47.750 2084-2084/com.group1.movieapplication W/mdb-api.com/...: type=1400 audit(0.0:1830): avc: denied { write } for name="perfd" dev="dm-5" ino=65549 scontext=u:r:untrusted_app:s0:c156,c256,c512,c768 tcontext=u:object_r:shell_data_file:s0 tclass=dir permissive=0 app=com.group1.movieapplication
2021-08-20 16:42:47.784 2084-2084/com.group1.movieapplication D/--: ┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2021-08-20 16:42:47.784 2084-2084/com.group1.movieapplication D/--: │ Thread: main
2021-08-20 16:42:47.784 2084-2084/com.group1.movieapplication D/--: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2021-08-20 16:42:47.785 2084-2084/com.group1.movieapplication D/--: │ FirebaseAuthRepository.getAllRating  (FirebaseAuthRepository.kt:62)
2021-08-20 16:42:47.785 2084-2084/com.group1.movieapplication D/--: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
2021-08-20 16:42:47.785 2084-2084/com.group1.movieapplication D/--: │ tt6264654
2021-08-20 16:42:47.785 2084-2084/com.group1.movieapplication D/--: └────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2021-08-20 16:42:47.789 2084-2084/com.group1.movieapplication D/AndroidRuntime: Shutting down VM
2021-08-20 16:42:47.792 2084-2084/com.group1.movieapplication E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.group1.movieapplication, PID: 2084
    java.lang.NullPointerException
        at com.group1.movieapplication.data.repository.FirebaseAuthRepository.getAllRating(FirebaseAuthRepository.kt:115)
        at com.group1.movieapplication.ui.movieDetail.MovieDetailViewModel.getAllRating(MovieDetailViewModel.kt:54)
        at com.group1.movieapplication.ui.movieDetail.MovieDetailFragment.getMovieRating(MovieDetailFragment.kt:89)
        at com.group1.movieapplication.ui.movieDetail.MovieDetailFragment.onViewCreated(MovieDetailFragment.kt:59)
        at androidx.fragment.app.Fragment.performViewCreated(Fragment.java:2987)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:546)
        at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2106)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
        at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
2021-08-20 16:42:47.829 2084-2124/com.group1.movieapplication W/System: Ignoring header X-Firebase-Locale because its value was null.
As the log goes, the function only gets to Timber.d(movieId) which is line 62 before throwing a before throwing a NullPointerException and crash the app without getting any data. It did not even get to the final checkpoint showing all the needed data before the return command.
Am I doing something wrong? Any tip is appreciated.

