EditText mit getText() auslesen

D

Duckemai

Fortgeschrittenes Mitglied
6
Hallo zusammen,

ich würde gerne ein EditText (ausgabe) auslesen. Aber mit:
String eingabe = ausgabe.getText().toString();

geht das ja gar nicht. Auch nicht mit:

eingabe = ausgabe.getEditableText().toString();
eingabe = (String)ausgabe.getText().toString();
eingabe = String.valueOf(ausgabe.getText().toString());
usw.
Habe zig Sachen versucht. Ohne Erfolg aber auch ohne Fehlermeldungen von Eclipse.

Wie lautet denn nun der richtige Befehl?

Besten Danke
Duckemai
 
EditText et = (EditText)findViewById(R.id.ausgabe);
String text = et.getText().toString();
 
..und was macht man, wenn bei diesem Befehl die ganze Zeit die App aussteigt?

Ich bin ein bißchen am verzweifeln:

ich habe ganz normal

EditText X;
String x_value;
...
X = (EditText) findViewById (R.id.x_position);
...
x_value = X.getText().toString();

und er steigt mir jedes Mal aus, wenn er eben den Text aus X auslesen soll!
Das ganze ist in einem AlertDialog und ich habe ein CustomLayout mit LayoutInflater
für den Dialog genommen; habe es zuerst mit .setPositiveButton versucht und
mittlerweile einen eigenen ClickHandler geschrieben...alles mit dem gleichen
Ergebnis!

Das kann doch gar nicht so schwer sein...

Buhu,
Frank

PS: so ganz nebenbei funktioniert auch mein .setOnItemClickListener nicht mehr
richtig, mit dem ich den Dialog auslöse
 
Hallo funk,
hallo swordi,

auch mein App verhält sich ausgesprochen merkwürdig, wenn ich versuche ein EditText auszulesen. Aber es liegt nicht am App selbst. Folgendes ist passiert:

Wenn ich aus dem EditText den Wert 5 + (fünf,Leerzeichen,plus) auslesen möchte - nämlich so wie swordi beschrieben hat - so geht das genau einmal. Nämlich dann, wenn ich Eclipse frisch gestartet habe. Danach liest er es nicht mehr aus. Hingegen den Wert 5 (fünf) kann er immer auslesen. Ich habe mal die catlog angehängt. Leider kann ich sie nicht interpretieren. Vielleicht gibt es hier einen Profi, der das kann und weiß, wonach er zu suchen hat.
Erste log ist nach Eclipsestart, wenn 5 + funktioniert.
Zweite ist, wenn ich ein zweites Mal 5 + auslesen möchte und er aber nichts ausliest:

Besten Dank
Duckemai

Anhang
 

Anhänge

  • Catlog zu Fehlermeldung EditText.doc
    84,5 KB · Aufrufe: 580
guck mal ob dein X nicht zufällig null ist
 
  • Danke
Reaktionen: Duckemai
Hm! Ich habe nun ein kleines App mit TextEdit und einem Button gebastelt. Da funktioniert es tadellos.

Also scheint es doch ein Fehler in meiner Programmlogik zu sein. Ich sehe zwar nicht, wo mein TextEdit NULL sein sollte, aber Du wirst recht haben.

Besten Dank
Duckemai
 
wenn du ein wenig mehr code zeigen würdest, wäre es vielleicht einfacher. hellsehen können wir hier leider (noch) nicht
 
Der Quellcode ist leider schon tapetenlang.
Hier aber die wesentlichen Stellen. Alles in einer Klasse:

class...
private EditText ausgabe;

onCreate...
ausgabe = (EditText) findViewById(R.id.EditText01);

//hier wird in das EditText-Feld etwas per user reingeschrieben

onClick...Button
private void plusminus (){
String test ="hallo";
test = ausgabe.getText().toString(); // keine Ausgabe, obwohl in
EditText etwas steht.

Na, das gibt wohl nicht viel her, oder?

Duckemai
 
das sind nicht die wesentlichsten stellen

zb : wo ist deine setContentView??
 
Nein das gibt nicht viel her. Falls es dich nicht stört (also das nur ne Übungsapp ist) dann hau den Quellcode mal auf pastebin und verlinke das hier.
 
Den ganzen Text kann ich hier leider nicht abdrucken.
Aber es ist tatsächlich ein Problem des Debuggers.
Das eigentliche Problem war ja, dass er einfache Zahlen wie zB "5" oder "12345" auslesen konnte, aber nicht
"5 +".

Die "5 +" wird durch Buttondruck wie folgt eingegeben und erscheint auch:
eingabe += String.valueOf(5);
ausgabe.setText(String.valueOf(eingabe));//Ausgabe

Die 5 erscheint.

Dann wird das Plus per Button gedrückt und ausgegeben:
ausgabe.setText(String.valueOf((Math.round(zwischenErg))+ " " + rechenzeichen));

Jetzt steht im Display 5 +

Wenn ich nun Frage:
String test ="hallo";
test = ausgabe.getText().toString();

ist test leer. Hätte ich aber zB: 123 eingegeben, dann würde er mir auch 123 anzeigen.
Aber wenn ich mit dem Debugger einen Haltepunkt unmittelbar HINTER
"test = ausgabe.getText().toString();" auswähle, dann befüllt er test immer. Wenn ich aber mit dem Debugger nur darüber laufe, nicht!!!
Komisch, oder?
 
Ok, jetzt doch mal ausführlicherer Quellcode, da ich einfach keine Lösung finde:

hier also die Ausschnitte aus meiner "main", in der eine Bluetooth-Discovery gefundene Devices in einer ListView auflistet. Wenn ich auf einen Eintrag klicke soll sich ein AlertDialog mit zwei EditText-Feldern öffnen. In diese kann man dann die X- und Y-Koordinate des gefundenen Device eintragen.
EDIT: Ich hab jetzt nochmal eine kleine Test-App geschrieben, die nur eben einen Toast ausgeben soll mit den Werten aus den beiden EditText-Feldern...

Es funktioniert alles soweit bis ich zu dem Punkt

edit[0] = X.getText().toString();

komme. Da schmeißt er mir eine IllegalStateException und ich weiß nicht warum

Code:
package de.zeh.android.EditTextTest;

import android.app.Activity;
import android.app.AlertDialog;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class EditTextTest extends Activity {
    String [] content = {"a", "b", "c", "d"};
    String [] edit;
    ArrayAdapter<String> mArrayAdapter;
    AlertDialog positionAlert;
    
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        mArrayAdapter = new ArrayAdapter<String> (this, R.layout.list_entries);
        ListView newListView = (ListView) findViewById(R.id.new_devices);
        newListView.setAdapter(mArrayAdapter);
        
        for (int i = 0; i<4; i++) {
            mArrayAdapter.add(content[i]);
        }
        
        newListView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick (AdapterView<?> a, View v, int list_position, long id) {
                AlertDialog.Builder position_builder = new AlertDialog.Builder(EditTextTest.this);
                LayoutInflater factory = LayoutInflater.from(EditTextTest.this);
                final View positionEditView = factory.inflate(R.layout.position_edit, null);
                position_builder.setView(positionEditView);
                positionAlert =  position_builder.create();
                positionAlert.show();
            }});
    }
    
    public void buttonClickHandler(View v) {
        switch (v.getId()){
        case R.id.pos_edit_button_ok:
            final EditText X = (EditText) findViewById (R.id.x_position);
            final EditText Y = (EditText) findViewById (R.id.y_position);
            edit[0] = X.getText().toString();
            edit[1] = Y.getText().toString();
            Log.d("Log 4.8",edit[0] + edit[1]);
            positionAlert.dismiss();
            Toast.makeText(getApplicationContext(), edit[0]+", "+edit[1], Toast.LENGTH_SHORT).show();
        break;
        case R.id.pos_edit_button_cancel:
            positionAlert.dismiss();
        break;
        }
    }
}
hier die position_edit.xml

Code:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="1tes Eingabefeld" />
        <EditText android:id="@+id/x_position" 
              android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:numeric="decimal"/>
        <TextView android:layout_width="wrap_content"
            android:layout_height="wrap_content" 
            android:text="2tes Eingabefeld" />
        <EditText android:id="@+id/y_position"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:numeric="decimal"/>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/position_edit_buttons"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_alignParentBottom="true" >
        <Button
            android:id="@+id/pos_edit_button_ok"
            android:layout_weight="50"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="OK"
            android:onClick="buttonClickHandler" />
        <Button
            android:id="@+id/pos_edit_button_cancel"
            android:layout_weight="50"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Cancel"
            android:onClick="buttonClickHandler" />
    </LinearLayout>
</LinearLayout>
hier die list_entries.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:padding="5dp"
/>
und schlussendlich die main.xml
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    > 
<ListView
        android:id="@+id/new_devices"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:stackFromBottom="true"
    />
</LinearLayout>

Bin für jede Hilfe dankbar!!

Das macht für mich einfach überhaupt keinen Sinn...
 
Zuletzt bearbeitet:
Also Leute,
ich bin da über etwas gestolpert zu diesem Thema, das ich eigentlich nicht glauben kann. Ich hatte nun an mehrerer Stellen im Programm das Problem, das Werte aus Variablen plötzlich verschwanden. zB

1. int zahl = 0;
...
45. eingabe +=String.valueOf(zahl).toString();
46. ausgabe.setText(eingabe);//Ausgabe

Wenn ich mit dem Debugger von Zeile 45 auf die Zeile 46 mit StepOver gehe, dann steht in eingabe:
eingabe = 0
Wenn ich noch mal StepOver drücke, also die Zeile 46 verlasse, dann steht in eingabe:
eingabe = "". Obwohl ich mich noch in der Methode befunden habe.

Dann habe ich die Zeile 45 so geändert:
eingabe = eingabe + String.valueOf(zahl).toString();

Dann behielt er den Wert 0 in eingabe auch bei.
Als ich dann die Zeile 45 wieder zurück verändert habe in:

eingabe +=String.valueOf(zahl).toString();

ging es plötzlich auch und der Wert eingabe = 0 wurde beibehalten.

HÄÄÄ! Ist das von einem schlauen Kopf unter Euch erklärbar?

Oder spinnt der Debugger in Eclipse?

Vielen Dank
Duckemai
 
So, jetzt mal noch ne try/catch um das getText().toString() gebaut,
aber der Stacktrace sagt mir auch irgendwie mal gar nichts..

Code:
08-05 14:01:10.249: ERROR/EditTextTest(28475): de.zeh.android.EditTextTest.EditTextTest$1$1.onClick(EditTextTest.java:53)
08-05 14:01:10.249: ERROR/EditTextTest(28475): com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158)
08-05 14:01:10.249: ERROR/EditTextTest(28475): android.os.Handler.dispatchMessage(Handler.java:99)
08-05 14:01:10.256: ERROR/EditTextTest(28475): android.os.Looper.loop(Looper.java:123)
08-05 14:01:10.256: ERROR/EditTextTest(28475): android.app.ActivityThread.main(ActivityThread.java:4363)
08-05 14:01:10.256: ERROR/EditTextTest(28475): java.lang.reflect.Method.invokeNative(Native Method)
08-05 14:01:10.256: ERROR/EditTextTest(28475): java.lang.reflect.Method.invoke(Method.java:521)
08-05 14:01:10.256: ERROR/EditTextTest(28475): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
08-05 14:01:10.264: ERROR/EditTextTest(28475): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
08-05 14:01:10.264: ERROR/EditTextTest(28475): dalvik.system.NativeStart.main(Native Method)

Hab ich erwähnt, dass ich am Verzweifeln bin? Das ist doch eigentlich ne
ganz simple Angelegenheit...
Wenn erwachsene Männer bitter weinen....
 
Ich vermute, dass Dein Thread nicht von all zu vielen gelesen wird, da Du ihn mit in meinen geschrieben hast. Wenn keiner antwortet, dann mache doch einen eigenen Thread auf, den Du dann auch entsprechend Deines Problems nennen kannst. Das hätte sicherlich größere Erfolgsaussichten ;)

Ich kann Dir leider nicht helfen, da ich derzeit auch tränenblind bin und mir auch noch die Erfahrung fehlt um Dein Problem wirklich zu verstehen.

Gruß
Duckemai
 
@funk:

Bei mir funktioniert

public class edittexttest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final EditText X = (EditText) findViewById (R.id.EditText01);
final EditText Y = (EditText) findViewById (R.id.EditText02);

Toast.makeText(getApplicationContext(), X.getText().toString()+", "+Y.getText().toString(), Toast.LENGTH_SHORT).show();
}
}

Damit wird der im xml vordefinierte Text ausgegeben.
Ich probier es nochmal mit nem Button und geänderten Texten.

package com.felixL.edittexttest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class edittexttest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

final EditText X = (EditText) findViewById (R.id.EditText01);
final EditText Y = (EditText) findViewById (R.id.EditText02);
final Button btn = (Button) findViewById (R.id.Button01);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Toast.makeText(getApplicationContext(), X.getText().toString()+", "+Y.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
Toast.makeText(getApplicationContext(), X.getText().toString()+", "+Y.getText().toString(), Toast.LENGTH_SHORT).show();
}
}
Geht auch. Getestet auf 2.2
 
Zuletzt bearbeitet:
Hey Felix,

das Ganze ging bei mir ja auch schon in einer anderen App: da hab ich
einen Dateinamen eingeben lassen in einem AlertDialog und gab es keine
Problem beim Auslesen des getText() ... deshalb bin ich ja so frustriert!
Ich dachte, dass mein Code vielleicht irgendeinen Fehler hat....

Gruß,
Frank
 
Es kann auch daran liegen wie du es befüllst (also wie du den EditText befüllst).
Setz doch mal einen Anfangstext in der xml, und schau ob es dann geht.
 
grab ja nur ungern Thread-Leichen aus, aber dieses Thema passt zu meinem jetzigen porblem und dafür wollte ich nicht extra ein neuen Thread eröffnen, ich hoffe ihr habt Verständnis dafür.

Also, da ich frisch in die Android-Programmierung eingestiegen bin, hab ich davon nicht so viel Ahnung. Allerdings wollte ich mich an ner Art "Formelrechner" versuchen.
habe EditText- Widgets erstellt, wo man ja text, in meinem fall eben zahlen eintippen soll.
Jetzt möchte ich diese zahlen auslesen, sie in Variablen speichern und dann in eine Formel einsetzen um das dann auszurechnen.
Aber wie gesagt habe ich keine Ahnung davon und wirklich schlau werde ich aus den Code-Beispielen nicht, bzw weiß nicht, wie ich das mit Zahlen machen soll.
Am liebsten wären mir fertige Beispiele, wo ich mir den Aufbau mal angucken könnte.

Vielen Dank schonmal;-)
Nivel
 
hast du jetzt probleme mit android selbst oder mit java??
 

Ähnliche Themen

H
Antworten
2
Aufrufe
1.309
Hcman
H
A
  • Alex1978
Antworten
4
Aufrufe
820
Alex1978
A
B
Antworten
4
Aufrufe
487
bb321
B
Zurück
Oben Unten