App Stürzt unerwartet nach aufruf eines neuen Layouts ab

  • Hallo zusammen.
    Bin neu hier im Forum, und auch neu was Adroid und Java angeht.
    Ich hab allerdings schon erfahrungen in PHP bin also nicht ganz auf dem Kopf gefallen ;)


    Allerdings hab ich grad ein paar probleme...
    Ich versuche mir grad ne kleine App zu Programmieren dir praktisch erstmal nix anderes machen soll als ein paar bestimmte rechnungen vor zu nehmen...


    Ich hatte dazu mal ein PHP Script geschriben und wollt das jetzt auch gern auf Android übertragen...


    Der Benutzer macht also (nur um erstmal mich zurecht zu finden) eine Eingabe in einem Textfeld mit einem Dezimal wert..
    Beispielsweise schreibt er 10 rein.
    Dadrunter ist jetzt ein Button.


    Jetzt soll eigentlich ein neues Layout sich öffnen, und der wert der eingegeben wurde, auf dem anderen Layout ausgegeben werden...


    Dazu hab ich in der MainActivity.java folgenden Code stehen:


    Es soll also erstmal geschaut werden was im EditText Reach_ML drin ist.. wenn gar nix eingegeben wurde soll der wert auf 10 gestellt werden, ansonsten das was im Textfeld eingegeben wurde anschließend das neue layout öffnen ein neues EditText erstellt werden und der Wert ausgegeben werden. Also entweder 10, oder das was eingegeben wurde...


    Klick ich auf dem Button kommt nur die Meldung APP_NAME wurde Beendet...
    Ich bin mir jetzt auch nicht sicher was die reihenfolge von SetContentView() an geht, wo es genau hin kommt, ob ich das sofort nach öffnen der button_click rein schreiben kann oder ob ich erst die Daten abrufen muss, bevor ich das neue Layout aufrufe.


    Erstelle ich mir jetzt ne Simple HalloWelt app, füge nur einen button hinzu und rufe die methode so wie oben auf (ohne das ich irgendwelche daten eingeben kann) dann funktioniert das.


    Wer könnte/würde mir da ein bisschen Starthilfe geben? Wäre echt dankbar für jede Hilfe ;)


    Gruß
    Moe

  • Du solltest dir in LogCat anzeigen lassen, warum genau er abgestürzt ist. Das ist oftmals sehr informativ. ;)


    Vermutlich hast du eine neue Activity angelegt, die du aufrufen möchtest.
    Besagte Activity musst du aber im AndroidManifest.xml auch Bekannt machen, sonst geht das nicht.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • LogCat schreibt da wilde sachen rein.. und nach löscht sie sofort aus dem log raus... dort genau nachzulesen ist irgenwie grad unmöglich :D


    Kann man das irgendwo einstellen das es direkt in eine log.txt geschrieben wird?


    zu dem rest... also ich hab einfach ein neues layout erstellt und calc.xml genannt..
    es liegt aber nicht daran das ich eine neue activity aufrufe.. was ich schon rausgefunden habe das es irgendwas mit den EditText dingern zutun hat...


    Ich hab grad mal ne neue test App erstellt und das ganze ein bisschen einfacher gehalten.
    hier mal nen auszug aus der MainActivity.java:

    Code
    public void bclick(View view){
    		
    		EditText MAIN = (EditText)findViewById(R.id.mainact);   
    		EditText RES = (EditText)findViewById(R.id.resmainact); 
    		RES.setText(String.valueOf(MAIN)); 
    		setContentView(R.layout.calc); 
    	}


    Also wenn ich EditText MAIN, EditText RES und RES.setText auskommentiere und nur die setContentView aufrufe wird auch das layout geladen...
    Aber sobald ich EditText MAIN = (EditText)findViewById(R.id.mainact); hinschreibe (egal wo) stürzt die app nach dem klick auf den button ab...


    Wie gesagt.. versteh ich grad gar nicht...

  • LogCat löscht eigentlich nix, es scrollt höchstens. Aber wenn du den Detail Level auf 'error' setzt, sollte das eigentlich gehen.


    Wie dem auch sei, ich gehe davon aus, dass du nicht einfach mal mitten drin das Layout der Activity ändern darfst. Zugegebenermaßen habe ich das nie probiert, weil es einfach im Hinblick auf Kapselung widersinnig ist.
    Du wirst wohl nicht um eine weitere Activity umhin kommen und musst ihr beim Aufrufen die Werte mitgeben.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Schmeiß den Filter weg. :)
    Der Logeintrag kommt vom System, nicht von deinem Code. LogCat ist aber so eingestellt, dass es nur Ausgaben des Packages com.example.test anzeigt.
    Sobald du 'All messages (no filters)' anklickst, sollte alles Mögliche auftauchen.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Dann lad das Projekt mal irgendwo hoch. Also die src/ und res/ Verzeichnisse reichen, die gen/, obj/ und wie sie alle heißen braucht keiner.


    Wäre doch gelacht, wenn wir das nicht hin bekämen. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Ich weiß jetzt gar nicht... kann ich bei Ubuntu One spezielle bereiche freigeben???
    Dann würd ich einfach den gesamten workspace frei geben.. is ja nix wirklich sensibles drin ^^


    [EDIT]ich habs über google Drive frei gegeben.. link schick ich dir gleich per PM

  • Na, du könntest ja einfach mal das Projektverzeichnis zippen und hochladen :P


    Heute komme ich allerdings nicht mehr dazu, das Fitnessstudio ruft. ^^

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Also ich komm da zu gar nix, kann nicht mal starten:


    Mal sehen, woran das wohl liegen könnte.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Keine Ahnung, was Eclipse da getan hat. Jedenfalls habe ich einfach ein neues Projekt angelegt und stumpf die res/ und src/ Ordner übernommen.
    So. ;)


    [MetalMoe]
    Also bei mir kommt:


    Du möchtest also aus einem reinen TextView einen editierbaren Text machen. Das geht so nicht.
    Weiterhin sehe ich, dass du von deinem Calculator-Intent auf die Werte des Main-Intents zugreifen möchtest. Auch das geht so nicht.


    Ich bastel mal kurz was. :)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Halt warte mal...
    Also was ich vorhabe... eigentlich...


    Benutzer muss einige angaben machen...
    Das meiste sind Decimal Numbers.


    Für "Test" zwecke wollte ich eigentlich mal 2 Felder nehmen... der Benutzer gibt die werte an... drückt auf den button... neues layout popt auf und kalkuliert entsprechend alles durch und gibt sie in einem ViewText aus...


    Wie in Html und php als form via POST und dann die $_POST["foo_bar"] variablen "abfragen"


    nachher ne wilde kaltulation anstellen und die ergebnisse in einem neuen layout anzeigen. mehr nicht...
    Jedenfalls erstmal...


    Schön wäre später vielleicht noch ne kleine Datenbank mit einzubauen und da grundlegende dinge drin zu speichern...


    Erklärung:
    Stellt euch ein Rezeptbuch vor (Datenbank) in diesem Rezeptbuch steht grundlegend das rezept... jetzt soll die App aber wenn ich das rezept anwähle mir erstmal gundlegende informationen anzeigen (wieviel % brauch ich von X) wenn ich dann sage ich will aber nicht 10 ml zubereiten sondern 250ml... wäre nice wenn die app enstrechend alles umrechnet...


    Ist halt bisschen komplex das so zu erklären wie ich das gerne hätte :D

  • Das problem ist... das ich Java neuling und damit auch Android neuling bin...


    soweit ich das jetzt verstanden habe sollte ich via Intent eine neue Activity starten...

    Code
    public void bclick(View view){
    		Intent intent = new Intent (this, Calculate.class);
    		startActivity(intent);
    	}


    also wenn der button gelickt wird, wird bclick gestartet.. soweit ist klar...
    Aber egal wierum ich das anstelle... ob nun neue aktivity oder neues layout .. das program stürzt immer nach dem buttonklick ab...


    Wenn ich in bclick jetzt aber ein neues layout starte, geht das zwar prinzipiell, solange wie ich nur normalen text ausgebe und nix mit EditText verändere....

  • Hab jetzt deinen Code nicht vor Augen (und eigentlich auch nicht ausreichend Zeit ihn komplett durch zu lesen) aber hab so das Gefühl, dass du ein kleines Verständnisproblem mit Layout vs. Activity hast.


    Eine Activity wählt in seiner onCreate ein XML-File als Layout aus und sagt "so seh ich aus". Die Activity kann auf alle Elemente dieses Layouts zugreifen, verändern, auslesen.
    Wenn du jetzt mit startIntent eine neue Activity startest, musst du vor diesem Aufruf deine Werte aus den EditText Elementen (oder was auch immer für Elemente du verwendest) holen/auslesen und in ein Bundle werfen, das du bei startIntent mit gibst.
    Hintergrund ist der, dass die Views aus dem Layout zerstört werden, sobald du eine neue Activity betrittst. Wozu auch auf heben, braucht nur Ram und der ist tendenziell knapp.
    Nun du liest deine Werte aus, packst sie in ein Bundle und gibst sie dem Intent mit.
    In der neuen Activity setzt du dann ein anderes Layout, sagst also wieder "so will ich aus sehen". In der onCreate kannst du auf dieses Bundle wieder zugreifen, deine Werte auslesen und in Elemente deines jetzt aktuellen, neuen Layouts setzen.


    Also Intent starten und Werte im Bundle mit geben: (hier entwendet)

    Java
    Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.edit_message);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);


    (Das DisplayMessageActivity, R.id.edit_message und EXTRA_MESSAGE natürlich durch deine Elemente ersetzen)


    und in deiner neuen Activity die Werte wieder auslesen


    Ich hoff das hilft dir irgendwie weiter.



    Gruß,
    Matze

Jetzt mitmachen!

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