0

I am getting the following error in my android studio. Is there any way I can solve this issue. Its causing a lot of crashes in my app.

E/AndroidRuntime: FATAL EXCEPTION: Firebase-Messaging-Intent-Handle
    Process: com.cnlcabs.cnldrivers, PID: 19224
    java.lang.RuntimeException: Can't create handler inside thread Thread[Firebase-Messaging-Intent-Handle,5,main] that has not called Looper.prepare()
        at android.os.Handler.<init>(Handler.java:227)
        at android.os.Handler.<init>(Handler.java:129)
        at com.cnlcabs.cnldrivers.data.MyFirebaseMessagingService.stopPlayer(MyFirebaseMessagingService.java:264)
        at com.cnlcabs.cnldrivers.data.MyFirebaseMessagingService.onMessageReceived(MyFirebaseMessagingService.java:233)
        at com.google.firebase.messaging.FirebaseMessagingService.dispatchMessage(com.google.firebase:firebase-messaging@@21.1.0:13)
        at com.google.firebase.messaging.FirebaseMessagingService.passMessageIntentToSdk(com.google.firebase:firebase-messaging@@21.1.0:8)
        at com.google.firebase.messaging.FirebaseMessagingService.handleMessageIntent(com.google.firebase:firebase-messaging@@21.1.0:3)
        at com.google.firebase.messaging.FirebaseMessagingService.handleIntent(com.google.firebase:firebase-messaging@@21.1.0:3)
        at com.google.firebase.messaging.EnhancedIntentService.lambda$processIntent$0$EnhancedIntentService(com.google.firebase:firebase-messaging@@21.1.0:1)
        at com.google.firebase.messaging.EnhancedIntentService$$Lambda$0.run(Unknown Source:6)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at com.google.android.gms.common.util.concurrent.zza.run(com.google.android.gms:play-services-basement@@17.5.0:6)
        at java.lang.Thread.run(Thread.java:923)

my code for myfirebasemessagingservice line 264 is

private void stopPlayer() {
    try {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                if (NotificationReceiverSoundPlay.mPlayer != null)

                    NotificationReceiverSoundPlay.mPlayer.stop();


            }
        }, 2000);
    } catch (IllegalStateException e) {
        e.printStackTrace();
    }
}
Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807

1 Answers1

0

You need to run these lines in UI thread not in a separate thread. Like this answer.

 new Handler().postDelayed(new Runnable() {
    activity.runOnUiThread(new Runnable() {
        public void run() {
            if (NotificationReceiverSoundPlay.mPlayer != null)
                NotificationReceiverSoundPlay.mPlayer.stop();
        }
    });
 }, 2000);
alierdogan7
  • 600
  • 7
  • 14