2

Ich bin auf der Anzeige eine Toast-Nachricht eine Laufzeitausnahme bekommenAnzeige Message von Firebase Mitteilung als Toast

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 

Ich mag den Nachrichtentext als Toast Meldung anzuzeigen, wenn der Benutzer eine Push-Benachrichtigung von erhält überall in der App.

Irgendwelche Hilfe?

public class MyAppFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "FCM Service"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
       if (remoteMessage.getNotification() != null) { 
      if (AppConfig.SYSTEM_WIDE_DEBUG) { 
       Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
      } 

      sendNotification(remoteMessage.getNotification().getBody()); 
     } 

    } 

    private void sendNotification(String messageBody) { 
     Toast.makeText(getApplicationContext(),messageBody,Toast.LENGTH_LONG).show(); 

     Intent intent = new Intent(this, HomeActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.pushnotify); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle("My APP") 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
} 
+0

Sieht aus wie Sie bereits 'Toast.makeText haben (...)' jedes Mal, wenn Sie anrufen 'sendNotification()'. Stimmt irgendetwas nicht? –

+0

Die Laufzeitausnahme bekomme ich bei jeder Benachrichtigung. –

+0

Rechts. Ich bin mir nicht sicher, ob das mit dem Toast zu tun hat. Möglicherweise mit dem Kontext. Kannst du den kompletten StackTrace bearbeiten und einfügen? –

Antwort

6

Wenn Sie Toast anzeigen möchten.Sie müssen auf dem UI-Thread ausführen;

Beispiel:

Handler handler = new Handler(Looper.getMainLooper()); 
handler.post(new Runnable() { 
    public void run() { 
     Toast.makeText(getApplicationContext(),Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

Danke. Ich werde die Tour machen. –