Probleme mit Debugger / Logging ..

  • Hallo zusammen,


    ich bin gerade dabei an meiner ersten Android-App zu basteln und habe schon mehrere Schwierigkeiten.


    ich rufe eine Activity auf, die als Pop-Up dienen soll:

    Code
    Intent intent = new Intent(this, PopUp.class);
            startActivityForResult(intent, ACTIVITY_POPUP);



    In meiner aufrufenden Activity will ich dann auch meine Results entgegen nehmen:



    In meiner PopUp-Activity soll es möglich sein Eingaben zu machen, diese sollen nach Drücken des Speicher-Buttons an die aufrufende Form zurückgeschickt werden:




    Leider funktioniert das ganze nicht. Er protokolliert mir auch nur diese Zeile raus:
    Log.d("savePopUp", "!?!?!?!");Die anderen Log-Einträge macht er erst gar nicht. Problematisch ist auch, dass er beim Debuggen überhaupt nicht in meiner Save-Function stoppt? In der OnCreate-Methode der PopUp-Activity stoppt er allerdings schon - also kein generelles Problem.In der onActivityResult() stoppt er auch nicht wenn ich einen Breakpoint mache.Was mache ich falsch?Viele Grüße.

  • Hallo,


    das Debuggen geht immer noch nicht, aber das Loggen funktioniert. Ich habe das Projekt mit dem "Bottom Navigation Activity" Template erstellt. Das beinhaltet auch 3 Fragmente mit jeweils einem ViewModel.


    Eventuell habe ich das auch ganz falsch implementiert. Die Funktion mit dem Aufruf des PopUps ist in meiner MainActivity. Der tatsächliche Button, der die Funktion aufruft, befindet sich aber auf einem Fragment.
    Sollte die Funktion dann direkt in das ViewModel und nicht in die MainActivity? Und das OnActivityResult dann auch im gleichen ViewModel ausprogrammieren?


    Wie sind hier die Best Practices? Eventuell muss ich mich auch erst einmal einlesen, wofür Fragments / ViewModels eigentlich da sind.

  • Hallo also erstmals solltest du in deiner Result Methode auch die Superkasse aufrufen.

    Code
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 1234) {
                if (resultCode == RESULT_OK) {
                ....



    Leider funktioniert das ganze nicht. Er protokolliert mir auch nur diese Zeile raus:
    Log.d("savePopUp", "!?!?!?!");Die anderen Log-Einträge macht er erst gar nicht.


    Wenn du das alles in der onCreate der Popup Kasse machst ist die schon beendet bevor du eine Eingabe machen kannst.
    Auf jeden fall brauchst du einen Listner der wartet.
    Entweder du erstellst einen Button und wertest dort die Eingabe aus und machst dein Result. Oder du setzt auf den EditText einen textwatcher mit Listner.



    Die Funktion mit dem Aufruf des PopUps ist in meiner MainActivity. Der tatsächliche Button, der die Funktion aufruft, befindet sich aber auf einem Fragment.


    Finde ich falsch. Dort wo der Button ist solltest du auch dein Popup aufrufen. Und dort wo der Aufruf ist kommt auch das Result an.


    Denke daran im Fragment brauchst den Kontext der Activity zb. bei findViewByIdoder auch beim Intent.


    Code
    Intent intent = new Intent(getActivity(), PopUp.class);
  • Hallo! Vielen Dank für die Antwort. Ich habe schon eine gesonderte Methode der PopUp-Klasse, die das macht. Es wird nicht in der onCreate ausgeführt.
    Ich habe es grad komischerweise ein einziges Mal geschafft auch im OnActivityResult() der MainActivity anzukommen, das ist passiert als meine PopUp-Activity mal gehängt ist und ich mehrmals auf den "Save" Button drücken konnte. Also scheint hier irgendwas mit den Events im Argen zu liegen.


    Ich wollte eigentlich schon die Klasse NotificationsViewModel (das Fragment) für diese Save-Funktion nutzen, aber hier kann ich im "onClick"-Event die Funktion dann gar nicht finden, obwohl sie als public deklariert ist.



    Edit: ich habe jetzt auch den Aufruf super.onActivityResult(requestCode, resultCode, data); hinzugefügt und nun geht sowohl das Debuggen und er kommt auch immer in die Funktion rein.


    Als nächstes möchte ich Daten, die ich zurückbekommen habe, in einer Liste anzeigen und schlussendlich auch abspeichern. Was würdest du hier empfehlen? Speichern im Dateisystem oder in einer SQLite-Datenbank?


    Viele Grüße.

  • Ich wollte eigentlich schon die Klasse NotificationsViewModel (das Fragment) für diese Save-Funktion nutzen, aber hier kann ich im "onClick"-Event die Funktion dann gar nicht finden, obwohl sie als public deklariert ist.

    In der Model Klasse gibt es kein onClick das ist nur eine Daten Klasse zum Austauschmit der Activity.
    Events haben da nichts zu suchen.



    Also scheint hier irgendwas mit den Events im Argen zu liegen.


    Wo ist den dein Button?


    Ich denke im Layout des Fragments. Also mache auch dort deinen Listner für den Button.


    Wie ich sagte Context der Activty benutzen.


    Denn das Event kommt in der Activty an und wenn du es in den Fragment bearbeitest brauchst du den Context.


    Auch ist es so dort wo du den intent startest sollte die Result Methode sein.




    in einen anderen Fragment oder in der activty kannst du nun auf das Model zugreifen.


    ViewModelProviders.of(this).get(NotificationsViewModel.class);

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!