IllegalStateExeption Android App

themrdomi

Mitglied
Hallo,
ich habe leider ein Problem mit meiner Android-App.
Ich bin gerade dabei, eine App zu programmieren, welche mir den Satz des Pythagoras ausrechnet.
Hat auch eigentlich schon funktioniert, doch nun zeigt mir Eclipse in der Konsole einen Fehler an und die App beendet sich, wenn ich sie ausprobiere.
Ich hoffe, dass einer von euch den Fehler findet, denn ich bin nach 3 Stunden suchen echt ratlos.
Ich habe nach dem Fehler auch schon gegoogelt, jedoch keine zufriedenstellende Antwort bekommen.

Java:
	public void onClickButton(View view){
		
		EditText feld1 = (EditText)findViewById(R.id.textfeld1);
		EditText feld2 = (EditText)findViewById(R.id.EditText01);
		EditText feld3 = (EditText)findViewById(R.id.EditText02);
		
		float zahl1 = Float.parseFloat(feld1.getText().toString());
		float zahl2 = Float.parseFloat(feld2.getText().toString());
		float zahl3 = Float.parseFloat(feld3.getText().toString());
		

		
		
			//Überprüfen, ob genügend Felder ausgefüllt sind
				if(((feld1.length() == 0) && (feld2.length() == 0) && (feld3.length() == 0)) ||
						((feld1.length() == 0) && (feld2.length() == 0)) ||
						((feld2.length() == 0) && (feld3.length() == 0)) ||
						((feld1.length() == 0) && (feld3.length() == 0))){
		
					
					Context context = getApplicationContext();
					CharSequence text = "Bitte gebe in mindestens 2 Felder etwas ein!";
					int duration = Toast.LENGTH_SHORT;
		
					Toast toast = Toast.makeText(context, text, duration);
					toast.show();
				}
				
								
				
				//Satz des Pythagoras, falls in Feld1 und Feld2 eine Zahl angegeben ist
				if(!(feld1.length() == 0) && !(feld2.length() == 0) && (feld3.length() == 0)){
					float ergebnis = (float) Math.sqrt((Math.pow(zahl1, 2) + Math.pow(zahl2, 2)));
					feld3.setText(String.valueOf(ergebnis));
					
				}
				
				//Satz des Pythagoras, falls in Feld1 und Feld3 eine Zahl angegeben ist
				if(!(feld1.length() == 0) && !(feld3.length() == 0) && (feld2.length() == 0)){
					float ergebnis = (float) Math.sqrt((Math.pow(zahl3, 2) + Math.pow(zahl1, 2)));
					feld2.setText(String.valueOf(ergebnis));
					
				}
				
				//Satz des Pythagoras, falls in Feld2 und Feld3 eine Zahl angegeben ist
				if(!(feld2.length() == 0) && !(feld3.length() == 0) && (feld1.length() == 0)){
					float ergebnis = (float) Math.sqrt((Math.pow(zahl3, 2) + Math.pow(zahl2, 2)));
					feld1.setText(String.valueOf(ergebnis));
				}

				
	}

Ihr müsst euch die App folgendermaßen vorstellen:
Ich habe 3 Textfelder und einen Absenden-Button.
Wenn ich in die ersten zwei Felder etwas eingebe, soll er das fehlende Feld entsprechend ausfüllen.

Fehlermeldung bekomme ich folgende:

java.lang.IllegalStateExeption: Could not execute method of the activity


Ich hoffe ihr könnt mir helfen!
Bei Fragen einfach fragen :)

Gruß Dominik
 

themrdomi

Mitglied
Hallo,
danke für deine Antwort.
Hier ist der Log:

Code:
05-21 19:01:42.548: E/AndroidRuntime(939): FATAL EXCEPTION: main
05-21 19:01:42.548: E/AndroidRuntime(939): java.lang.IllegalStateException: Could not execute method of the activity
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.view.View$1.onClick(View.java:3599)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.view.View.performClick(View.java:4204)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.view.View$PerformClick.run(View.java:17355)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.os.Handler.handleCallback(Handler.java:725)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.os.Handler.dispatchMessage(Handler.java:92)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.os.Looper.loop(Looper.java:137)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.reflect.Method.invoke(Method.java:511)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at dalvik.system.NativeStart.main(Native Method)
05-21 19:01:42.548: E/AndroidRuntime(939): Caused by: java.lang.reflect.InvocationTargetException
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.reflect.Method.invoke(Method.java:511)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at android.view.View$1.onClick(View.java:3594)
05-21 19:01:42.548: E/AndroidRuntime(939): 	... 11 more
05-21 19:01:42.548: E/AndroidRuntime(939): Caused by: java.lang.NumberFormatException: Invalid float: ""
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.StringToReal.invalidReal(StringToReal.java:63)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.StringToReal.parseFloat(StringToReal.java:289)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at java.lang.Float.parseFloat(Float.java:300)
05-21 19:01:42.548: E/AndroidRuntime(939): 	at com.themrdomi.pythagoras_three.MainActivity.onClickButton(MainActivity.java:71)
05-21 19:01:42.548: E/AndroidRuntime(939): 	... 14 more


Gruß Dominik
 

turtle

Top Contributor
Ich habe null Ahnung von Android-Programmierung, aber...
Caused by: java.lang.NumberFormatException: Invalid float: ""
Sieht für mich aus, das leere Felder nicht zu einem float geparsed werden können;)

Geht in "normalen" Java nämlich auch nicht.
Code:
Exception in thread "main" java.lang.NumberFormatException: empty String
 

themrdomi

Mitglied
Hmm, ok danke.
Ich habe es gerade ohne die if Abfragen ausprobiert, funktioniert einwandfrei!
Ich denke der Fehler liegt bei der Umkehrung mit den Ausrufezeichen und der length() == 0
Hat jemand eine Alternative im Kopf, wie ich das anders lösen könnte?

Gruß
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Anweisung schreiben , welche bei einem leeren Text einen Standartwert einsetzt in deinem Fall dann
Code:
0f


Zusätzlich zur abfrage der länge
Java:
if(feld.getText().equals(""){...}

[EDIT]Turtle war schneller :D[/EDIT]
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Naja du musst halt prüfen ob sobald du den Button betätigst eine Zahl in deinem TextFeld steht die geparst werden kann, falls nicht fliegt sonst eine Exception also könnte man z.B folgendes machen :

Java:
if(feld.getText().length() == 0){
  feld.setText("0");
}

man könnte sonst auch

Java:
if(feld.getText().equals("")){
  field.setText("0");
}

oder auch eine Kombination aus beidem.

Zumal bist du dir sicher,

das
Code:
feld.length();
die länge seines Inhaltes liefert , und nicht die anzahl der columns o.ä ? :)
 
Zuletzt bearbeitet:

themrdomi

Mitglied
Hi,
klappt alles nicht :'(
Ich habe sogar versucht, einen String einzulesen und dann umzuwandeln, klappt alles nicht :(

Normalerweise mag ich das ja nicht, aber kann mir bitte jemand den folgenden Code korrigieren falls er den Fehler findet, denn ich stehe grade echt auf dem Schlauch?
Wäre super!

Java:
package com.themrdomi.pythagoras_three;

import android.support.v7.app.ActionBarActivity;
import android.support.v4.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		if (savedInstanceState == null) {
			getSupportFragmentManager().beginTransaction()
					.add(R.id.container, new PlaceholderFragment()).commit();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {

		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
				Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.fragment_main, container,
					false);
			return rootView;
		}
	}

	public void onClickButton(View view){
		
		EditText feld1 = (EditText)findViewById(R.id.textfeld1);
		EditText feld2 = (EditText)findViewById(R.id.EditText01);
		EditText feld3 = (EditText)findViewById(R.id.EditText02);
		
		String zahl1 = feld1.getText().toString();
		String zahl2 = feld2.getText().toString();
		String zahl3 = feld3.getText().toString();

		
	
		
			//Überprüfen, ob genügend Felder ausgefüllt sind
				if(((feld1.getText().equals("")) && (feld2.getText().equals("")) && (feld3.getText().equals(""))) ||
						((feld1.getText().equals("")) && (feld2.getText().equals(""))) ||
						((feld2.getText().equals("")) && (feld3.getText().equals(""))) ||
						((feld1.getText().equals("")) && (feld3.getText().equals("")))){
		
					
					Context context = getApplicationContext();
					CharSequence text = "Bitte gebe in mindestens 2 Felder etwas ein!";
					int duration = Toast.LENGTH_SHORT;
		
					Toast toast = Toast.makeText(context, text, duration);
					toast.show();
				}
				
								
				
				//Satz des Pythagoras, falls in Feld1 und Feld2 eine Zahl angegeben ist
				if(feld1.getText().equals("")){
					float float2 = Float.parseFloat(zahl2);
					float float3 = Float.parseFloat(zahl3);
					
					float ergebnis = (float) Math.sqrt((Math.pow(float3, 2) - Math.pow(float2, 2)));
					feld3.setText(String.valueOf(ergebnis));
					
				}
				
				//Satz des Pythagoras, falls in Feld1 und Feld3 eine Zahl angegeben ist
				if(feld2.getText().equals("")){
					float float1 = Float.parseFloat(zahl1);
					float float3 = Float.parseFloat(zahl3);
					
					float ergebnis = (float) Math.sqrt((Math.pow(float3, 2) + Math.pow(float1, 2)));
					feld2.setText(String.valueOf(ergebnis));
					
				}
				
				//Satz des Pythagoras, falls in Feld2 und Feld3 eine Zahl angegeben ist
				if(feld3.getText().equals("")){
					float float1 = Float.parseFloat(zahl1);
					float float2 = Float.parseFloat(zahl2);
					
					float ergebnis = (float) Math.sqrt((Math.pow(float1, 2) + Math.pow(float2, 2)));
					feld1.setText(String.valueOf(ergebnis));
				}

				
	}
}

Jetzt spuckt er mir folgende Fehlermeldung aus:

Code:
05-22 19:24:56.133: D/gralloc_goldfish(1144): Emulator without GPU emulation detected.
05-22 19:24:56.493: D/dalvikvm(1144): GC_CONCURRENT freed 195K, 12% free 2557K/2892K, paused 11ms+43ms, total 332ms
05-22 19:25:05.213: D/AndroidRuntime(1144): Shutting down VM
05-22 19:25:05.223: W/dalvikvm(1144): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
05-22 19:25:05.343: E/AndroidRuntime(1144): FATAL EXCEPTION: main
05-22 19:25:05.343: E/AndroidRuntime(1144): java.lang.IllegalStateException: Could not execute method of the activity
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.view.View$1.onClick(View.java:3599)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.view.View.performClick(View.java:4204)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.view.View$PerformClick.run(View.java:17355)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.os.Handler.handleCallback(Handler.java:725)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.os.Handler.dispatchMessage(Handler.java:92)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.os.Looper.loop(Looper.java:137)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.app.ActivityThread.main(ActivityThread.java:5041)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.reflect.Method.invoke(Method.java:511)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at dalvik.system.NativeStart.main(Native Method)
05-22 19:25:05.343: E/AndroidRuntime(1144): Caused by: java.lang.reflect.InvocationTargetException
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.reflect.Method.invokeNative(Native Method)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.reflect.Method.invoke(Method.java:511)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at android.view.View$1.onClick(View.java:3594)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	... 11 more
05-22 19:25:05.343: E/AndroidRuntime(1144): Caused by: java.lang.NumberFormatException: Invalid double: ""
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.StringToReal.invalidReal(StringToReal.java:63)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.StringToReal.parseDouble(StringToReal.java:248)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.Double.parseDouble(Double.java:295)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at java.lang.Double.valueOf(Double.java:332)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	at com.themrdomi.pythagoras_three.MainActivity.onClickButton(MainActivity.java:71)
05-22 19:25:05.343: E/AndroidRuntime(1144): 	... 14 more

Gruß Dominik
 
Zuletzt bearbeitet:

X5-599

Top Contributor
Ersetze deine
Java:
feldx.getText().equals("")
in den if Abfragen durch
Java:
zahlx.equals("")

So wie du es jetzt hast dürfte da eigentlich gar nichts passieren denn "einEditText.getText()" liefert etwas vom Interface Typ "Editable". Bei mir ist das die Klasse "android.text.SpannableStringBuilder". Und ein Objekt dieses Typs ist natürlich niemals gleich "".

Also zB in Zeile 96 statt:
if(feld1.getText().equals("")){

entweder:
if(feld1.getText().toString().equals("")){

oder gleich:
if(zahl1.equals("")){


Und zum eigentlichen Fehler. Der tritt auf wenn Float.parseFloat(floatZahlAlsString) mit einem leeren String "" aufgerufen wird.
 

kaoZ

Top Contributor
So hier mal ein Ausschnitt aus einer Android App die ich mal programmiert habe,

Ich habe dies folgendermaßen gelöst
Java:
for(int i=1; i<=index; i++)
{
	EditText edt1 = (EditText)findViewById(1000 + i);
				
	if (edt1.getText().length()==0) 
	{
		edt1.setText(NULL);
	}

NULL ist in diesem Fall eine Konstante vom Typ double(0.00) welche eingesetzt wird sobal kein Text beim Klicken des Buttons in den Textfeldern stehen sollte.

Java:
final static double NULL = 0.00;

Wenn beim abfeuern der Action kein Text ( also die Länge des Inhalts == 0) in den Textfeldern stehen sollte werden die Textfelder mit dem Wert
Code:
0.00
gefüllt und das parsen stellt kein Problem mehr da, in deinem Fall musst du den Datentyp Float verwenden da du ja auf Float parst , zumindest geht dies aus deinem LogCat hervor.

Funktioniert reibungslos !
 
Zuletzt bearbeitet:

Adelhorst

Mitglied
Hallo.
Parsen auf ""-String oder Strings mit ungültigen Zeichen (es könnten ja auch andere Zeichen als nur numerische eingegeben werden) führen zu einer Exception.
Entweder fängst du diese Exception bei jedem parsen auf und korrigierst dann den Wert auf einen Exception-Default-Wert
Java:
    float float3;
    try{
        float3 = Float.parseFloat(zahl3);
    } catch (Exception e) {
        float3 =  0.0;  //Default-Wert bei Parse-Fehler
    }
oder brichst die weitere Berechnung einfach ab.

Den folgenden Part habe ich berichtigt, denn in deinem Original prüfst du zwar auf fehlende Eingabefelder und gibst eine Meldung aus, aber der Teil danach wird trotzdem ausgeführt und parsed munter auf Leerstrings.
Hier der berichtigte und etwas umgestellte Teil:
Java:
//Überprüfen, ob genügend Felder ausgefüllt sind und Berechnung ausführen
    if(!feld2.getText().equals("") && !feld3.getText().equals("")){
        //Satz des Pythagoras, falls in Feld2 und Feld3 eine Zahl angegeben ist
        float float2 = Float.parseFloat(feld2.getText());
        float float3 = Float.parseFloat(feld3.getText());
                   
        float ergebnis = (float) Math.sqrt((Math.pow(float2, 2) - Math.pow(float3, 2)));
        feld1.setText(String.valueOf(ergebnis));
    }else if(!feld1.getText().equals("") && !feld3.getText().equals("")){
        //Satz des Pythagoras, falls in Feld1 und Feld3 eine Zahl angegeben ist
        float float1 = Float.parseFloat(feld1.getText());
        float float3 = Float.parseFloat(feld3.getText());
                   
        float ergebnis = (float) Math.sqrt((Math.pow(float1, 2) + Math.pow(float3, 2)));
        feld2.setText(String.valueOf(ergebnis));
    }else if(!feld1.getText().equals("") && !feld2.getText().equals("")){
        //Satz des Pythagoras, falls in Feld1 und Feld2 eine Zahl angegeben ist
        float float1 = Float.parseFloat(feld1.getText());
        float float2 = Float.parseFloat(feld2.getText());
                       
        float ergebnis = (float) Math.sqrt((Math.pow(float1, 2) + Math.pow(float2, 2)));
        feld3.setText(String.valueOf(ergebnis));
    }else{
        Context context = getApplicationContext();
        CharSequence text = "Bitte gebe in mindestens 2 Felder etwas ein!";
        int duration = Toast.LENGTH_SHORT;
       
        Toast toast = Toast.makeText(context, text, duration);
        toast.show();
    }

Edit: Ich sehe gerade erst, dass es noch eine zweite Seite dieses Themas gibt. Ich habe noch auf Seite 1 geantwortet. Naja, wahrscheinlich ist das nun schon nicht mehr aktuell, aber ich lasse meine Antwort trotzdem mal stehen.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Parsen auf ""-String oder Strings mit ungültigen Zeichen (es könnten ja auch andere Zeichen als nur numerische eingegeben werden) führen zu einer Exception.

Dies ist ein Trugschluss.... man kann unter Android unter Verwendung der .xml Dateien in welchen die TextFelder deklariert werden angeben welchen Typ diese Besitzen sollen, demnach kann man dort schon festlegen was in diesem Feld eingegeben werden kann, z.B könnte man so

[XML]
<EditText
android:inputType="numberDecimal"
>
[/XML]

schon festlegen das nur Nummern / Fließpunktzahlen in diesem Textfeld eingegeben werden können und das beinhaltet zum einen schon das ein Dementsprechendes Tastaturlayout ( insofern verfügbar) aufgerufen wird, und zum anderen das es nicht möglich ist Pattern in diesem Textfeld einzutragen die eben nicht unter den Typ "numberDecimal" fallen.
 
Zuletzt bearbeitet:

themrdomi

Mitglied
Hallo,
ich habe das ganze jetzt noch ein wenig vereinfacht, doch ich verstehe immernoch nicht, was den Fehler macht.
Die erste if Abfrage geht ohne Probleme.
Wenn ich dahinter jedoch eine zweite mache, spuckt das Programm nur Fehler.
Woran liegt das?
Hier mal nur eine Abfrage:
Java:
	public void onClickButtonAusrechnen(View view){
		EditText feld1 = (EditText)findViewById(R.id.textfeld1);
		EditText feld2 = (EditText)findViewById(R.id.textfeld2);
		EditText feld3 = (EditText)findViewById(R.id.textfeld3);
		
		float zahl1 = Float.parseFloat(feld1.getText().toString());
		float zahl2 = Float.parseFloat(feld2.getText().toString());

		
		//Falls nicht genügend Felder ausgefüllt sind
		if(!feld1.getText().toString().equals("") && !feld2.getText().toString().equals("") && feld3.getText().toString().equals("")){
			float ergebnis;			
			ergebnis = (float) Math.sqrt(Math.pow(zahl1, 2)+Math.pow(zahl2, 2));
			feld3.setText("" + ergebnis);
			
			
		}
		
	}

Hier, mit zwei Abfragen:
Java:
	public void onClickButtonAusrechnen(View view){
		EditText feld1 = (EditText)findViewById(R.id.textfeld1);
		EditText feld2 = (EditText)findViewById(R.id.textfeld2);
		EditText feld3 = (EditText)findViewById(R.id.textfeld3);
		
		float zahl1 = Float.parseFloat(feld1.getText().toString());
		float zahl2 = Float.parseFloat(feld2.getText().toString());

		
		//Falls nicht genügend Felder ausgefüllt sind
		if(!feld1.getText().toString().equals("") && !feld2.getText().toString().equals("") && feld3.getText().toString().equals("")){
			float ergebnis;			
			ergebnis = (float) Math.sqrt(Math.pow(zahl1, 2)+Math.pow(zahl2, 2));
			feld3.setText("" + ergebnis);
			
			
		}
		else{
			feld1.setText("Es ist ein Fehler aufgetreten!");
		}
		
	}

Die erste Variante funktioniert einwandfrei, doch wenn ich das else reinpacke und beispielsweise in Feld1 und Feld3 etwas eingebe kommt die gleiche Fehlermeldung wie immer :(
Das kann doch irgendwie nicht sein, oder?

lg
Dominik
 

themrdomi

Mitglied
Hi,
mir ist gerade aufgefallen, dass wenn ich alle Felder leer lasse eine Exeption auftritt.
Falls ich aber in alle 3 Felder etwas eingebe, macht er das, was ich will.
Falls ich nur in 2 Felder etwas eingebe, tritt auch eine Exeption ein.
Das else wird also einfach übersprungen?
Wie kann ich denn sonst überprüfen, ob das Feld leer ist, denn so geht es ja offensichtlich nicht?

Gruß
Dominik
 

Adelhorst

Mitglied
Hallo.
Mein Tipp hierzu, ohne dass ich es jetzt getestet habe. Ist schon etwas her, dass ich Android-Projekt gemacht habe, bin eher mit Win-Projekten beschäftigt:
Java:
        //Falls nicht genügend Felder ausgefüllt sind
        if(!feld1.getText().toString().equals("") && !feld2.getText().toString().equals("") && feld3.getText().toString().equals("")){
            //Das Parsen sollte hier hinein, da du hier schon abgeklärt hast, dass die Felder
            //zumindest keine Leerstrings enthalten
            float zahl1     = Float.parseFloat(feld1.getText().toString());
            float zahl2     = Float.parseFloat(feld2.getText().toString());
            //Ergebnis berechnen
            float ergebnis = (float) Math.sqrt(Math.pow(zahl1, 2)+Math.pow(zahl2, 2));
            feld3.setText("" + ergebnis);
        }
        else{
            //Zur Fehlermeldung solltest du ein eigenes Textfeld oder Label hernehmen.
            //Wenn du den Fehler-Text in feld1 einträgst erhältst du beim nächsten parsen des Feldes
            //wohl wiederum eine Exception.
            //Desweiteren, wenn du die Felder (wie schon angesprochen) auf numeric deklariert hast, 
            //dann wird die Zuweisung von nicht numerischen Text wohl eine Exception auslösen.
            feld1.setText("Es ist ein Fehler aufgetreten!");
        }
 

themrdomi

Mitglied
Hi, danke funktioniert jetzt.
Eine Bekannte hat mir auch noch ein paar Tipps zum Lösen gegeben.
Für alle, die wissen wollen, was der Fehler war:
Man kann einen Float nicht parsen, wenn der String leer ist.
Deshalb muss man genau das machen, was Adelhorst mir geschrieben hat.

Gruß Dominik
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Naxon89 Threads Android AysncTask => Überprüfen, ob ein Ergebniss schon vorliegt Java Basics - Anfänger-Themen 5
Bene247 Android App (Trinkspiel) Java Basics - Anfänger-Themen 1
N Android Studio notwendig oder sinnvoll? Java Basics - Anfänger-Themen 7
S Gibt es irgendeine Möglichkeit, dies zu tun?(Android Studio) Java Basics - Anfänger-Themen 1
I Java Anwendung auf Android portieren Java Basics - Anfänger-Themen 1
S Android Service ferngesteuert starten Java Basics - Anfänger-Themen 5
A Alternativen zu Android Studio ??? Java Basics - Anfänger-Themen 14
L Android Activity Java Basics - Anfänger-Themen 10
A Wie gebe ich bei android eine string im programm aus? Java Basics - Anfänger-Themen 4
F JAVA oder Android Studios Java Basics - Anfänger-Themen 3
J Datentypen Komm in einem Android Buch mit Java nicht weiter... Java Basics - Anfänger-Themen 7
L Problem mit Android ListView Java Basics - Anfänger-Themen 2
W Pfeiltasten im Android Studio Java Basics - Anfänger-Themen 1
A Erste Schritte Zu Android exportieren Java Basics - Anfänger-Themen 6
M Spracherkennung in Android Java Basics - Anfänger-Themen 3
S Wie entwickelt man eine Library die auf dem JRE und Android laeuft..? Java Basics - Anfänger-Themen 0
A Android-Lib: Sourcecode Generator mittels Annotation Processing Java Basics - Anfänger-Themen 0
A Random String in TextView (Android)? Java Basics - Anfänger-Themen 2
T Android Display in 4 teilen... Java Basics - Anfänger-Themen 3
T Android opengl will net.. Java Basics - Anfänger-Themen 3
T Android App: Laden dauert lange Java Basics - Anfänger-Themen 1
M Variablen Zähler funktioniert nicht - Android App Java Basics - Anfänger-Themen 3
A Suche Programmierer für Android App Java Basics - Anfänger-Themen 1
K Android vs Java+libgdx Java Basics - Anfänger-Themen 1
K Android 2d engine mit fortlaufendem hintergrund Java Basics - Anfänger-Themen 1
G Android App Java Basics - Anfänger-Themen 3
kaoZ Input/Output Typprüfung (Android ) Java Basics - Anfänger-Themen 1
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
K Erste Schritte Android Recources (MyFirstApp) Java Basics - Anfänger-Themen 4
B Variablen Android: Spinner-Eintrag einen versteckten numerischen Wert zuordnen und Variable übergeben Java Basics - Anfänger-Themen 3
kaoZ Alternative zu ToggleButton (Android/Java) Java Basics - Anfänger-Themen 12
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
C Android APP - Load More Button und beschleunigung... Java Basics - Anfänger-Themen 2
M javamail android app Java Basics - Anfänger-Themen 3
M Wie lernt man Android Java Basics - Anfänger-Themen 22
J Android R.Java verändern!? Java Basics - Anfänger-Themen 6
J Android app Satzteile Java Basics - Anfänger-Themen 3
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4
eLogic Android - Fehler "stopped unexpectedly" Java Basics - Anfänger-Themen 7
E Android: OnClickListener erkennt Buttons nicht Java Basics - Anfänger-Themen 7
E Buttons in Android generieren? Java Basics - Anfänger-Themen 4
E Welcher Package Name bei Eclipse/Android? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben