Problem mit Aufbau eines Formulars

  • 47 Antworten
  • Neuester Beitrag
Diskutiere Problem mit Aufbau eines Formulars im Android App Entwicklung im Bereich Betriebssysteme & Apps.
L

Lilithian

Ambitioniertes Mitglied
Da kam dein Post dazwischen...

Du musst auf jeden Fall den Text aus dem EditText rausholen und umwandeln. Mit getInputType() bekommst du den Typ, nicht das was im Textfeld drin steht!
 
Zuletzt bearbeitet:
P

pyretta

Ambitioniertes Mitglied
also doch wieder "int a = Integer.parseInt (text)" ? :blink:

Ja aber... das ging doch nicht.

Gut jetzt habe ich das Problem, dass egal was ich eingebe immer das erste Bild angezeigt wird. Ich dachte das liegt an den Operatoren, aber wenn du sagst, dass ich es eben doch umwandeln muss.... hmm das würde natürlich auch eine Erklärung dafür sein.

Wie soll ich das denn dann machen? :mellow:
 
L

Lilithian

Ambitioniertes Mitglied
Lilithian schrieb:
Code:
int a = Integer.parseInt("alter_wert");
Wenn du das so aufrufst, ist "alter_wert" ein String mit dem Wert "alter_wert", du übergibst dem parsen einfach nur "alter_wert" und daraus kann er natürlich keine Zahl machen. ;)
Die Anführungszeichen müssen weg damit du auf deine Variable zugreifst.

Daher kam auch der Hinweis, dass alter_wert nicht benutzt wird!
Hatte ich vorhin schon mal geschrieben, durch den zweiten Post ist es aber auf die vorherige Seite geruscht.
Du machst das dann so wie du es vorher hattest, mit dieser Änderung. Dann müsste es gehen.
 
P

pyretta

Ambitioniertes Mitglied
Ja aber... es geht doch eben nicht.

Siehe "EDIT" von 12:11 Uhr . Dein Eintrag war erst um 12:38 .
Also später, ich bin es also nicht, der nicht genau liest :razz:... Oder ich hatte mich eben missverständlich ausgedrückt.

Wenn ich das ändere, dann geht zwar die Warnung weg, aber die App wird trotzdem zerschossen :huh:. Also wird einfach geschlossen sobald die zweite Activity aufgerufen wird. Also der ganze Emulator wird geschlossen. Dann kommt ein kleines Fensterchen das mir sagt, dass jetzt der Debug-Bereich geöffnet wird. (Ich starte die App immer im Debug-Modus.)

Ich hab das zwar nicht verstanden warum, aber sie tuts eben.

Hast du sonst noch eine Idee, wie ich das ganze in eine Zahl wandle mit der ich in der If-Abfrage rechnen kann?
 
L

Lilithian

Ambitioniertes Mitglied
Deine Änderung hatte ich wirklich nicht bemerkt, sorry. ^^

Schau doch mal was LogCat dir für einen Fehler zeigt.
(In Eclipse zu finden: Window -> Show View -> Other -> Android -> LogCat)

Oder schau mal (über Log oder Debugger) was in deiner Variable a steht bevor es abstürzt.
 
P

pyretta

Ambitioniertes Mitglied
Hier mal was mir das System ausgibt:

Debugger:

ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2663
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2679
ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125
ActivityThread$H.handleMessage(Message) line: 2033
ActivityThread$H(Handler).dispatchMessage(Message) line: 99
Looper.loop() line: 123
ActivityThread.main(String[]) line: 4627
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]
Method.invoke(Object, Object...) line: 521
ZygoteInit$MethodAndArgsCaller.run() line: 868
ZygoteInit.main(String[]) line: 626
NativeStart.main(String[]) line: not available [native method]
LogCat:


02-04 13:25:38.759: INFO/System.out(649): waiting for debugger to settle...
02-04 13:25:38.970: INFO/System.out(649): debugger has settled (1473)
02-04 13:25:40.473: INFO/ActivityManager(59): Displayed activity de.appname.alpha01/.IU_formular: 4894 ms (total 4894 ms)
02-04 13:25:46.284: DEBUG/dalvikvm(130): GC_EXPLICIT freed 681 objects / 37944 bytes in 98ms
02-04 13:25:51.485: DEBUG/dalvikvm(297): GC_EXPLICIT freed 194 objects / 11696 bytes in 276ms
02-04 13:25:56.464: DEBUG/dalvikvm(304): GC_EXPLICIT freed 46 objects / 2112 bytes in 249ms
02-04 13:25:58.083: WARN/KeyCharacterMap(649): No keyboard for id 0
02-04 13:25:58.083: WARN/KeyCharacterMap(649): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
02-04 13:26:00.854: INFO/ActivityManager(59): Starting activity: Intent { cmp=de.appname.alpha01/.IU_ergebnis (has extras) }
02-04 13:26:10.920: WARN/ActivityManager(59): Launch timeout has expired, giving up wake lock!
02-04 13:26:11.059: WARN/ActivityManager(59): Activity idle timeout for HistoryRecord{45070348 de.appname.alpha01/.IU_ergebnis}
Ich kann da leider keine Varibale finden :unsure:

Aber ich hoffe du kannst damit trotzdem etwas anfangen. Für mich als Anfänger sind das Hyroglyphen.
 
P

pyretta

Ambitioniertes Mitglied
aalsooo..

ich habe mir mal einfach den Wert des EditText-Felds in der zweiten Activity ausgeben lassen als TextView. (Ich habe es einfach nur als String übergeben, nicht weiter bearbeitet, also nicht als Integer umgewandelt)

Der String lautet komischerweise wie folgt:

"android.widget.EditText@44f2ba90"

Eingegeben habe ich allerdings nur "10".

Allerdings verstehe ich jetzt warum der DAS nicht als Integer umwandeln will, der arme Kerl. Ich würd das auch nicht wollen.

Also irgendwas scheint bei der Wertübergabe schiefgelaufen zu sein :huh:.

Hier nochmal wie ich das versucht habe zuübergeben:
txtalter=(EditText) findViewById(R.id.ed_alter);

bundle.putString("alter_wert", txtalter.toString());
*haare rauf* Das müsste doch zu schaffen sein, manno!

Habt ihr eine weitere Idee? Was mach ich falsch?
 
Zuletzt bearbeitet:
Z

Zoopa

Stammgast
Der Fehler liegt in der Zeile
Code:
bundle.putString("alter_wert", txtalter.toString());
damit erhälst du nur eine String-Repräsentation des Textfelds, aber du willst natürlich den Inhalt des Textfelds haben, deshalb:

Code:
bundle.putString("alter_wert", txtalter[B].getText()[/B].toString());
 
P

pyretta

Ambitioniertes Mitglied
GEIIIIIIIIIIIIL!!!! :scared::thumbsup:

Genau das wars! Oh mann, vielen vielen Dank Zoopa!!

Mein Held! *füße küss* ich bin uuuunwürdig (Waynes World Zitat .. falls das überhaupt wer kennt)

Ja klar, war auch logisch ... getText... also JETZT ist mir das alles klar, warum das nicht gehen konnte. Ich unerfahrener Depp ich. :blushing:


Mensch, Mensch. Vielen Dank. Der Tag ist gerettet. :biggrin:
 
P

pyretta

Ambitioniertes Mitglied
*räusper*

Jetzt habe ich doch noch ein kleines Problemchen. :blushing:

Nämlich... was ist wenn so ein Schlaumaier einfach gar nix in das Formular einträgt? Dann crashed es mir wieder die App, was ja klar ist, weil nix da ist womit der Android arbeiten kann.

Habe da jetzt den ganzen Tag rumprobiert und im Internet und in den Büchern gesucht. Ich bin nur leider nicht schlauer geworden.

Am coolsten wäre es, wenn ich auf der Seite des Formulars direkt ein Toast ausgeben könnte, das mir sagt "gib gefälligst alle Daten ein!", wenn nicht alles ausgefüllt wurde.

Das habe ich wie folgt versucht:

Code:
private EditText txtalter;

if (txtalter != null){
            Bundle bundle = new Bundle();
            txtalter=(EditText) findViewById(R.id.ed_alter);
            rb1=(RadioButton)findViewById(R.id.rb_frau);
            rb2=(RadioButton)findViewById(R.id.rb_mann);
            
            
             bundle.putString("alter_wert", txtalter.getText().toString());
             bundle.putBoolean("rb1_status", rb1.isChecked());
             bundle.putBoolean("rb2_status", rb2.isChecked());

            my_intent.putExtras(bundle); 
            startActivity(my_intent);
        }
       else if (txtalter == null){
            Toast.makeText(this, 
                "Sie haben noch nicht alle Daten eingegeben.",
                Toast.LENGTH_LONG).show();
        }
Das geht im Prinzip auch, aber es zeigt mir jetzt einfach immer den Toast an, und die nächste Activity wird nie gestartet. Ich nehme an, er weiss nicht recht was "txtalter" ist oder "null" ist nicht ganz richtig für Textfelder.

Dann habe ich gedacht, ok, umgehen wir das ganze und geben ein TextView auf der zweiten Activity aus, das einen informiert, dass man scheiße gebaut hat und wieder zurück muss um es zu korrigieren.

Das habe ich so versucht:

Code:
        Bundle bundle = this.getIntent().getExtras();
        boolean rb1_status = bundle.getBoolean("rb1_status");
        boolean rb2_status = bundle.getBoolean("rb2_status");
        String alter_wert = bundle.getString("alter_wert");
        int a = Integer.parseInt(alter_wert);

        if (alter_wert != null){
        
        if (rb1_status == true) {            
                if (a >= 1 && a <= 4) {
                ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
                imgAustausch.setImageResource(R.drawable.k_2_4f);
                }

                else if (a <= 0 && a >= 101) {
                    final TextView txtError =
                        (TextView) findViewById(R.id.error);
                        txtError.setText("Bitte kehren Sie auf den vorigen Bildschirm zurück, und geben ein Alter von 1-100 Jahren ein. Vielen Dank.");
                    }
        }
        
        if (rb2_status == true) {
            if (a >= 1 && a <= 4) {
            ImageView imgAustausch = (ImageView) findViewById(R.id.bild_id);
            imgAustausch.setImageResource(R.drawable.k_2_4m);
            }
         
            else if (a <= 0 && a >= 101) {
                final TextView txtError =
                    (TextView) findViewById(R.id.error);
                    txtError.setText("Bitte kehren Sie auf den vorigen Bildschirm zurück, und geben ein Alter von 1-100 Jahren ein. Vielen Dank.");
                }
                   
        }
        }
        
        if (alter_wert == null){
            final TextView txtError =
                (TextView) findViewById(R.id.error);
                txtError.setText("Sie haben nicht alle Daten eingegeben. Bitte kehren Sie auf den vorigen Bildschirm zurück, und geben die Daten erneut ein. Vielen Dank."); 
        }
Tja, das crashed dann die App.

Ich habe auch "alter_wert" durch "txtalter" und durch "a" und durch "bundle" ersetzt. Kommt alles auf das gleiche raus.

"bundle" erschien mir anfangs eigentlich als das Logischste, weil da ja alle Werte drin gespeichert werden. Wenn das "Bündel" leer ist, kann man damit ja auch nix anfangen.

Natürlich habe ich vor dem Testen immer das vorige Rumprobieren rückgängig gemacht.

Ich weiss, ich nerve bestimmt, aber ich bin nunmal ein Anfänger. :blushing:
Ich hoffe das ist nun meine letzte Frage.

Bitte helft mir...
 
L

Lilithian

Ambitioniertes Mitglied
In deinem ersten Versuch ist txtalter immer null, weil du erst innerhalb der if-Schleife zuweist, was txtalter überhaupt ist.

Code:
txtalter=(EditText) findViewById(R.id.ed_alter);
Die Zeile muss dann über die if-Schleife. Und dann möchtest du ja nicht testen, ob das Textfeld existiert (!= null ist), sondern ob etwas drin steht, also prüfe doch wie folgt:

Code:
private EditText txtalter = (EditText) findViewById(R.id.ed_alter);
if (txtalter.getText().toString().equals("")) {
  // Toast anzeigen
} else {
  // Intent abschicken
}
 
P

pyretta

Ambitioniertes Mitglied
BOAHR!

1. wow, wie schnell!
2. hat wunderbar geklappt!

Bin echt beeindruckt! Vielen vielen vielen vielen Dank, Lilithian!!
*mal n Kasten Bier hinstellt* :biggrin: (Falls ein anderes Getränk erwünscht, suche und ersetzte :winki::biggrin:)

Dieses "equals("")" für was steht das eigentlich genau?
Kann man damit prüfen, ob etwas keinen Inhalt hat? *lernen will*
 
Zuletzt bearbeitet:
S

swordi

Lexikon
evtl solltes du dir mal in ruhe ein java buch durchlesen, sonst wird dieser thread hier 1000 seiten lang.

wenn du lernen willst, dann führt daran kein weg vorbei, auch wenn du ungeduldig bist, es nützt nichts!
 
L

Lilithian

Ambitioniertes Mitglied
Naja, wenn du Zahlen und so vergleichst, benutzt du ja ==
Bsp. if (int_a == int_b) {}

Das funktioniert aber bei Strings nicht. Strings musst du immer mit .equals vergleichen. ;)
Also: if (string_a.equals(string_b)) {}

Das überprüft einfach nur, ob die beiden Strings gleich sind.
 
P

pyretta

Ambitioniertes Mitglied
entschuldige swordi..

Ich versuch ja alles im Rahmen meiner Möglichkeiten. Aber so als Anfänger gibt es einfach Dinge, die man nicht weiss und die man vielleicht auch nicht in einem Buch findet, weil man eventuell noch nichtmal weiss wonach man suchen sollte. Dem Buch kann ich leider (noch) keine direkten Fragen stellen.

Du hast schon recht, dass ich großen Schulungsbedarf habe. Das versuche ich doch aber gerade zu ändern. Ich nehme an, als du angefangen hast die erste Zeile Code zu schreiben, hattest du auch einige Fragen. Aber vielleicht bist du ja auch ein Autodidakt. Ich leider nicht.

Ich dachte nur, wenn es ein so großartiges Forum gibt wie dieses hier, könnte ich das vielleicht auch dafür nutzen.

Ich verstehe ja, dass es nervt ständig solche Frischlinge betüddeln zu müssen. Tut mir auch echt leid. Wenn ich auf anderem Wege zum Ziel käme, würde ich euch nicht nerven.

@Lilithian

Vielen Dank für dein Verständnis und deine Hilfe. Die Erklärung ist sehr einleuchtend, vielen Dank.
 
S

swordi

Lexikon
ich verstehe, dass man viele fragen hat, aber alle antworten wären innerhalb weniger sekunden auch bei google gefunden worden ;)

grade die anfängerfragen, die wirklich jeder anfänger hat, sind im weiten netz zu hauf bereits super erklärt. ich denke es bedarf da nicht noch mehr threads zu den themen.

wenn du dir ein buch kaufst und dir es durchliest, dazu noch beispiele machst, wirst du viel mehr verstehen. wenn es dann noch detailfragen gibt, ist das hier gern gesehen und es werden dir sicher viele helfen.

aber es macht keinen sinn hier die grundlegendsten fragen 1000 mal durchzukauen.

ist ja nichts gegen dich, aber im allgemeinen gibt es hier immer die gleichen fragen.

viel erfolg noch ;)
 
P

pyretta

Ambitioniertes Mitglied
Auf die Gefahr hin, dass dies auch eine grundlegende Frage ist...

Wie kann ich ein ImageView per MultiTouch zoomen?
Also diese typische 2-Finger-Geste auf dem Display?

Ich hab dieses Forum hier durchsucht, es scheint kein Thema zu dieser Frage zu existieren.

Die Bücher die ich habe, geben mir hierauf auch keine Antwort.

Dann habe ich bei Google gesucht und folgende Tutorials bzw. Codeschnipsel gefunden:

Android: Zooming the ImageView

und

Android one finger zoom tutorial ? Part 3 | Developer World

letzteres ist enorm kompliziert und umfangreich.

Ersteres erschien mir etwas einfacher.
Aber folgende Zeile hätte ich gerne etwas anders:

Code:
image=context.getResources().getDrawable(R.drawable.gallery_photo_1);
und zwar so bzw. so ähnlich:
Code:
image = (ImageView) findViewById(R.id.bild_id);
Weil ich ja das ImageView über die Id erst mit Bildern fülle.

Aber, naja, wie das so ist bei mir... Es funktioniert nicht.

Hier zeigt mir Eclipse einen Fehler an:
Code:
image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);
Und zwar unterkringelt es den "setBounds".

Wenn ich den Originalcode unverändert übernehme, scheint folgende ganze Zeile falsch zu sein:
Code:
image=context.getResources().getDrawable(R.drawable.gallery_photo_1);
Könnt bzw. wollt Ihr mir da weiterhelfen, auch wenn es eventuell eine doofe Anfängerfrage ist?

Vielen Dank im Voraus für eure Mühe und Hilfe.

Liebe Grüße

pyretta
 
L

Lilithian

Ambitioniertes Mitglied
Hab das selbst noch nicht gemacht, aber der Fehler tritt eventuell auf, weil im Beispiel "image" eine Drawable ist und bei dir ein ImageView.

Vielleicht reicht es ja schon wenn du dir vom ImageView das Drawable holst, also:

Code:
image = findViewById(R.id.bild_id);
Drawable mDrawable = image.getDrawable();
mDrawable.setBounds(....);
 
P

pyretta

Ambitioniertes Mitglied
Vielen Dank für deine Antwort Lilithian.

ich hab das nun so eingefügt wie du vorgeschlagen hattest. Hier der gesamte Code:

Code:
    public class Zoom extends View {
        private Drawable image;
        //private ImageView image;
        private int zoomControler=200;
        public Zoom(Context context)
        {
        super(context);
       
        image = findViewById(R.id.bild_id);
        Drawable mDrawable = image.getDrawable();
        setFocusable(true);
        }
        @Override
        protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //here u can control the width and height of the images........ this line is very important
        mDrawable.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);
        //image.setBounds((getWidth()/2)-zoomControler, (getHeight()/2)-zoomControler, (getWidth()/2)+zoomControler, (getHeight()/2)+zoomControler);
        image.draw(canvas);
        }
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_DPAD_UP)// zoom in
        zoomControler+=10;
        if(keyCode==KeyEvent.KEYCODE_DPAD_DOWN) // zoom out
        zoomControler-=10;
        if(zoomControler<10)
        zoomControler=10;
        invalidate();
        return true;
        }
        }
Jetzt unterkringelt es mir "findViewById(R.id.bild_id);", "image.getDrawable();" und "mDrawable.setBounds".

Ich hab den Code dann wieder wie folgt geändert:

Code:
ImageView image = (ImageView) findViewById(R.id.img_impfuhr);
Das scheint der zu mögen.
Aber er kann dann mit beiden "mDrawable" nix anfangen.

Ich hab dann auch weitergegooglet und hier:
android - How can I get zoom functionality for images? - Stack Overflow

zwei Lösungsansätze gefunden.

Das eine mit den 3 Java-Dateien (TouchImageView.java, WrapMotionEvent.java, EclairMotionEvent.java) scheint nur für SDKs über 2.0 zu funktionieren. Ich benutze aus Kompatibilitätsgründen aber 1.6.

Dann etwas weiter unten, schlägt jemand vor ImageView durch WebView zu ersetzen. Das habe alle Zoommöglichkeiten von Haus aus.

Das ging aber leider überhaupt nicht. :unsure:

EDIT: Ich hab jetzt mal den Titel dieses Themas etwas abgewandelt, da es ja doch zwei Themenbereiche abdeckt. (hoffe das ist kein Problem...)

EDIT2: Shit, das geht ja gar nicht... Kann ja nur die "Überschrift" für jeden Post ändern... Mist.
 
Zuletzt bearbeitet:
S

swordi

Lexikon
Aber er kann dann mit beiden "mDrawable" nix anfangen.

mdrawable musst du irgendwo deklarieren damit er das kennt
 
Ähnliche Themen - Problem mit Aufbau eines Formulars Antworten Datum
1
3