1. Vultan, 09.01.2019 #1
    Vultan

    Vultan Threadstarter Erfahrener Benutzer

    Ich hab vor 5 Tagen angefangen mit Android Studio.
    Sicher sollte ich alles nach und nach angehen, aber ich lerne am besten beim ausprobieren.
    Meine App kann inzwischen Google-Push Nachrichten empfangen, Sprechen,
    Einträge in XML Dateien Lesen Speichern und Löschen.
    Mit SharedPreferences die Eingabefelder Speichern
    und meine Lampen über IOBroker ein und ausschalten.
    Nein ich hab das nicht alles so zusammengebaut ich lerne auch erfolgreich dabei.
    Zudem kann ich auch PureBASIC und andre Sprachen.
    Durch meine eigne Art zu lernen, hab ich auch etwas Erklärungsnöte.
    Ich hoffe das ich mich verständlich ausdrücke!

    Jetzt habe ich das Problem,
    das wenn die Google-Push Nachrichten in der Klasse
    public class ....... FirebaseMessagingService ankommen.

    kann ich zwar Variablen an public class MainActivity ..... übergeben,
    aber wenn ich versuche ein Element zu ändern, mit zum Beispiel!
    MainActivity.imageButtonLicht.setActivated(true);
    Stürzt die App einfach ab.

    Eigentlich ist meine Frage wie gebe ich die Nachrichten
    vom FirebaseMessagingService an die MainActivity so weiter,
    Das ich die Nachrichten direkt nach dem eintreffen bearbeiten kann ?


    Hier hab ich mal das nötigste zusammengestellt.

    Code:
    public class FcmMessagineService extends FirebaseMessagingService {
        @Override
        public void onMessageReceived(RemoteMessage remoteMessage) {
            String title = remoteMessage.getNotification().getTitle();
            String massage = remoteMessage.getNotification().getBody();
            popMessage(title,massage); 
            String neueNachricht = title +"__"+ massage;
            MainActivity.testVariableXXXXX = neueNachricht;        // OK
            MainActivity.imageButtonLicht.setActivated(true);     // absturtz
        }
    }
    

    Code:
    public class MainActivity extends AppCompatActivity {
        static String testVariableXXXXX = "Main";
        static ImageButton imageButtonLicht ; 
        @SuppressLint("WrongViewCast")
        
        @Override
        protected void onCreate(final Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            final SharedPreferences sharedPreferences = getPreferences(this.MODE_PRIVATE);
            
            imageButtonLicht    = (ImageButton) findViewById(R.id.imageButtonLicht);
            imageButtonLicht.setActivated(false);
    
            imageButtonLicht.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    imageButtonLicht.setActivated(true);
                    }
            });
        }
    }
    
    
    
     
  2. swa00, 09.01.2019 #2
    swa00

    swa00 Moderator Team-Mitglied

    Hallo,

    was sagt denn dein error-Log in dem Falle ?
    Ich vermute mal , dass deine Mainactivity Instanz nicht mehr gültig ist ,
    oder du auf den UI Thread zugreifst.

    Communicate with the UI thread | Android Developers



    Bitte stelle mal den Log ein , damit wir nicht rätseln müssen.

    Nachtrag :
    Code:
    MainActivity.imageButtonLicht.setActivated(true);
    sieht sehr sehr statisch aus , das kannst du unter Android so nicht zuverlässig umsetzen .
     
    Zuletzt bearbeitet: 09.01.2019
  3. Vultan, 09.01.2019 #3
    Vultan

    Vultan Threadstarter Erfahrener Benutzer

    Hallo und Danke für die schnelle Antwort
    Das bekomme ich als error Meldung. Ist alles Rot!

    Code:
    ==================
    E/dalvikvm: Could not find class 'android.app.Notification$Action$Builder', referenced from method android.support.v4.app.NotificationCompatBuilder.addAction
    E/dalvikvm: Could not find class 'android.media.AudioAttributes$Builder', referenced from method android.support.v4.app.NotificationCompat$Builder.setSound
    .....
    .....
    .....
    E/AndroidRuntime: FATAL EXCEPTION: Firebase-FcmMessagineService
        Process: com.example.markus.fcmwithappserver, PID: 11698
        android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
            at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6030)
            at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:853)
            at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320)
            at android.view.View.invalidate(View.java:10935)
            at android.view.View.setActivated(View.java:15754)
            at com.example.markus.fcmwithappserver.FcmMessagineService.onMessageReceived(FcmMessagineService.java:83)
            at com.google.firebase.messaging.FirebaseMessagingService.zzd(Unknown Source)
            at com.google.firebase.iid.zzc.run(Unknown Source)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at com.google.android.gms.common.util.concurrent.zza.run(Unknown Source)
            at java.lang.Thread.run(Thread.java:841)
    ==================
     
  4. swa00, 09.01.2019 #4
    swa00

    swa00 Moderator Team-Mitglied

    Und da haben wir schon den Fehler :)

    Du greifst (verbotener Wiese) auf den UI Thread zu . (Siehe oben)

    Auch wenn du erst seit 5 Tage dran bist, Dein Programsstil ist nicht Android Java conform
    (Siehe auch oben)
    Du kannst dazu ggf Listener einsetzen.
     
    markus.tullius bedankt sich.
  5. Vultan, 09.01.2019 #5
    Vultan

    Vultan Threadstarter Erfahrener Benutzer

    OK Danke das ist ein Ansatz! Ich schau mal.
    Ja, ich weiß, das meine Programmiertechnik im Moment unter alle sa.. ist.
    Aber bisher hab ich so eine menge Programmiersprachen gelernt.
    Die Feinheiten mach ich später.
    Das muss man nicht verstehen! Aber bei mir Funktioniert das.

    Angefangen hat alles mit dem C64 und Maschinensprache!
    Nein ich will keinen Weltrekord brechen!
    Hat sich alles so ergeben!
     
  6. swa00, 09.01.2019 #6
    swa00

    swa00 Moderator Team-Mitglied

    Aber nicht lange - sorry :) Das ist gelinde gesagt sehr tödlich

    Unter Android sollte man keine statischen Ausdrücke anwenden , da dir Android den Inhalt von Variablen
    "klauen" kann - Lese dazu Dir mal GarbageCollector und LifeCycle durch.

    Anders als unter C/C++ u.ä. musst du dich selbst darum kümmern und ggf die Instanz in der einer zweiten Klasse mit getter und setter verarbeiten .
    Oder einen Constructor verwenden, der die ParentInstanz übergibt.
    Alternativ dazu die Klasse als SingleTon vererben.
     
  7. Vultan, 09.01.2019 #7
    Vultan

    Vultan Threadstarter Erfahrener Benutzer

    Das finde ich immer so lustig in Foren!
    Mann möchte nur einen kleinen schubs!
    Und muss sich für jedes Komma verantworten.
    Ja ich habe Bücher , Ja ich kenne getter und sette , ua. !
    Aber ich fahre halt meine eigene Schiene
    Und dennoch brauche ich vor der Mühe den Erfolg! ;)
     
    Zuletzt bearbeitet: 09.01.2019
  8. swa00, 09.01.2019 #8
    swa00

    swa00 Moderator Team-Mitglied

    Das kam jetzt nicht gerade höflich an .

    Bitte bedenke : An der anderen Seite sitzen Programmierer , die sich für DICH
    die Zeit nehmen, auf DEIN Problem einzugehen . - Wir können es bereits und üben es beruflich aus.

    Wenn es Dir also nicht recht sein sollte , dass man sich diese Zeit nimmt ,
    dann sei bitte uns gegenüber so fair und frage nicht mehr nach.

    Und wenn du Bücher hast und es eh besser weist :
    Warum setzt du das nicht so um , wie es dort beschrieben steht ? :)
     
    jogimuc bedankt sich.
  9. deek, 09.01.2019 #9
    deek

    deek Android-Experte

    Das hat jetzt nichts mit "für ein Komma verantworten" zu tun.
    Ein Service und eine Activity haben einfach einen komplett anderen Lifecycle. Dein Service kann ja auch Nachrichten empfangen wenn deine Activity gar nicht da ist, weil der User was anderes macht.
    Deshalb sollte man mit etwas wie EventBus, LocalBroadcast oder rxJava beschäftigen. Das tut erstmal weh, aber anders funktioniert es einfach nicht.
     
    jogimuc und swa00 haben sich bedankt.
  10. swa00, 09.01.2019 #10
    swa00

    swa00 Moderator Team-Mitglied

    deek - hat keinen Mehrwert - scheint zwecklos zu sein :)
     
  11. Vultan, 09.01.2019 #11
    Vultan

    Vultan Threadstarter Erfahrener Benutzer

    Entschuldigung ! :1f622: Ich habe was vergessen!
    Mein Fehler!
    Das sollte so aussehen!

    Nicht falsch verstehen, ich bin auch dankbar für den Tipp!

    Das finde ich immer so lustig in Foren!
    .......
    ...


    Nachtrag:
    ist vielleicht auch nicht besser,
    war aber auch nicht böse gemeint!
     
    Zuletzt bearbeitet: 09.01.2019
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Firebasenachricht kommt nicht bei jedem Gerät an Android App Entwicklung 26.09.2018
TextView wert übergeben Android App Entwicklung 28.06.2018
Pushup Nachrichten Android App Entwicklung 09.05.2018
Notification beenden wenn ein übergebener Intent ausgeführt wird. Android App Entwicklung 02.03.2018

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. firebase messaging service

Du betrachtest das Thema "Nachrichten vom FirebaseMessagingService an die MainActivity übergeben?" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.