Newbie Frage TextEdit

J

jim

Ambitioniertes Mitglied
0
Hallo liebes Forum,

ich bin Anfänger in der Android Programmierung und habe schon gegoogelt und im Forum, sowie Bücher gelesen und wahrscheinlich reicht mein Wissen gerade nicht aus um weiter zu kommen.

Ich möchte gern eine Applikation schreiben bei der man einen Wert eingeben kann welcher dann für eine Berechnung intern genutzt wird. Letztlich möchte ich gern ein kleines Physikspiel bauen(als Training). Auf dem Weg dahin versuche ich die Werte in die Application zu bekommen(bzw. in die Instanz(wenn das so richtig ist)). Der Wert soll dort einfach eine velocity sein die darüber entscheidet ob ein Ball aus einer gewissen Höhe auf ein Brett fällt. Dieses Brett befindet sich am linken Rand und bewegt sich nach rechts mit der eingegebenen Geschwindigkeit. Ich scheitere momentan an dem einfachen Versuch den Wert zu bekommen, da die Applikation abstürzt wenn ich den empfangenen String in ein double casten möchte.

Hier mal der Code

ich habe in der main.xml

<EditText
android:text="0"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number">///sinnvoll?? da kleinere Versionen die Funktion nicht unterstützen

</EditText>
und möchte jenen Wert dann später in einer Formel mit ein fließen lassen.

dies hab ich so versucht
//////////////////////////////////////////////////////////////
///getValue and cast to double
inputValue = (EditText) findViewById(R.id.EditText01);
String tmpString =inputValue.getText().toString();

if(tmpString.length() != 0)
{ //nachdem die nächste Zeile ausdokumentiert wird läuft das Programm, ansonsten erhalte ich Fehlermeldung
double inputValueAsDouble = Double.parseDouble(tmpString);
}
/////////////////////////////////////////////////////////////

ist bestimmt nicht schwer, aber kann leider den Fehler nicht finden
 
für mich klingt das ganz danach, das der Wert in tmpString nicht zu einem Double gecastet werden kann. Was gibst du als Wert den genau ein? Und hast du dir den tmpString einfach mal ausgeben lassen oder einfach in eine TextView geschrieben, so das man wirklich sieht, was da enthalten ist?
 
da wird wohl eine

numberformatexception kommen

die du nicht abfängst
achtung bei . und , als trennzeichen
 
deshalb hätte mich die Ausgabe des Strings bzw die korrekte Eingabe mal interessiert.
 
was hast du denn eingegeben. zahlen ohne komma sollte ja funktionieren
 
hello again,

bin mir gerade nicht sicher, ich habe nun beim Erstellen vom EditText android:text="0" eingefügt und dann caste ich zu int(was auch mit mal funktioniert! Ich habe auch noch nie nen Wert vorher eingegeben sondern den default text="0". Nun möchte ich aber das der Wert sich aktualisiert wenn ich im EditText einen neuen Wert eingebe und wollte ein Listener benutzen. leider gibt es einen Error wenn ich

// inputValue.setOnKeyListener( this);///Error benutze

hier mal die .jar

package com.jb;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;


public class gravity_Game extends Activity
{


private EditText inputValue;
//private double inputValueAsDouble;
private int velocity;
/////////////////////////////////////////////////////////////////////////////////////////////
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{

super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//////////////////////////////////////////////////////////////////////////////////////////////
///spinner
Spinner s1 = (Spinner)findViewById(R.id.Planets);
ArrayAdapter<CharSequence> adapter =
ArrayAdapter.createFromResource(this,R.array.Planeten, android.R.layout.simple_spinner_item);
s1.setAdapter(adapter);
/////////////////////////////////////////////////////////////////////////////////////////////
///getValue and cast to int
inputValue = (EditText) findViewById(R.id.EditText01);
// inputValue.setOnKeyListener( this);///Error

String tmpString =inputValue.getText().toString();

if(tmpString.length() != 0)
{
velocity = Integer.parseInt(tmpString);
}
/////////////////////////////////////////////////////////////////////////////////////////////
///Textview for Inputvalue
TextView velocityValue = (TextView)findViewById(R.id.EditTextValue);
velocityValue.setText( velocity + "ms");

/////////////////////////////////////////////////////////////////////////////////////////////

}

/////////////////////////////////////////////////////////////////////////////////////////////
/*void calculate()
{

}*/

}


vergesse ich was zu initialisieren?

LG Jim (danke für die vielen Antworten bis jetzt)
P.S. oll ich nen neuen Thread aufmachen, wegen des neuen Problems??
 
unterstreicht der da bei dir nichts in schönem rot?

inputValue.setOnKeyListener( this);

Das kann so denke ich gar nicht funktionieren solange deine Klasse den OnKeyListener nicht implementiert.
 
ja vielen Dank für den Hinweis! --> erledigt
Ich hätte aber zur gleichen Problematik eine Frage. Ein Ziel war es bei onClickListener() die Funktionalität zu besitzen, bei Eingabe einer Zahl, diese zu lesen und erstmal in ein Textfield zu schreiben. Leider funktioniert das nicht. Ich clicke und clicke und kann höchsten ein neuen Wert eingeben. Ich habe da was gelesen, dass die Grundfunktionen vom Edittext stören. Leider war die Quelle nicht genau... .

aktuelle Code
Code:
 inputValue = (EditText) findViewById(R.id.EditText01);
        
        inputValue.setOnClickListener( new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                 String tmpString =inputValue.getText().toString();
                    
                    if(tmpString.length() != 0)
                    {
                        velocity  = Integer.parseInt(tmpString);
                    }
                
            }
        });
Ich möchte weniger ein Button zum Setzen des Wertes benutzen, muss ich dazu ein anderen Listener benutzen und mit dem Edittext setzen?

Herzlichen Dank!
 
Also zum einen hattest du vorher einen onKeyListener, nun ist es ein onClickListener, zum anderen weiss ich nicht genau ob der Code bei der Funktion onClick überhaupt ausgeführt wird. Habe die Listener bisher immer anders eingebaut. Aber onClick ist denke ich auch nicht gerade das was du suchst. Es soll ja passieren nachdem du dort was eingegeben hast. Da gibts noch einen Listener der auf die "Enter" Eingabe reagiert in einem Textfeld. Das blosse Verlassen einen Textfeldes kann soweit ich weiss keinen event ausführen, es sei denn ein Verlassen wäre gleichgesetzt mit einem "Enter"

Das weiss ich aber allerdings nicht, da ich mich mit Android auch erst seit kurzem beschäftige und die ganzen Listener noch nicht vollständig durchprobert habe.

wenn du einfach mal "inputValue. " schreibst, dann sollte er dir doch auch auflisten, welche Funktionen alle möglich sind. Les dich da einfach mal durch die Listener oder schau mal in die API. Ich denke das führt am schnellsten zu einem Ergebnis.

Grüße
 
hello again,

ja vielen Dank für den Tipp mit dem Punktoperator.... .
Die verwendung von Listener bzw. deren unterschiedliche initialisierung habe ich hier gefunden.

http://tseng-blog.nge-web.net/blog/...g-listeners-in-your-android-java-application/

der Code sieht jetzt so aus
Code:
inputValue = (EditText) findViewById(R.id.EditText01);
        
        inputValue.setOnEditorActionListener(new OnEditorActionListener()
        {
            @Override
              public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
            {
                if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
                {
                    //velocity = getValue and cast to double
                    velocityDouble = Double.parseDouble(inputValue.getText().toString());
                    
                    ///Textview for Inputvalue
                    TextView velocityValue = (TextView)findViewById(R.id.EditTextValue);
                    velocityValue.setText( velocityDouble + "ms");
                }
                return false;
            }
        });
soweit funtioniert jetzt alles wie ich es erstmal wollte!
Vielen Dank nochmal und einen schönen Tag!!
LG Jim

P.S. gibts hier kein Frage wurde beantwortet Button???
 
Zuletzt bearbeitet:

Ähnliche Themen

M
Antworten
2
Aufrufe
629
Mozart40
M
A
Antworten
1
Aufrufe
583
swa00
swa00
SpeedySix
Antworten
13
Aufrufe
1.400
jogimuc
J
Zurück
Oben Unten