Absturz der App bei leeren Edittext

brilzi89

Bekanntes Mitglied
Hallo zusammen,
brauche mal wieder Hilfe :/

Und zwar stürzt meine App ab wenn ein Feld leer ist, wegen NullPointerException.

Ich habe es mit einer if anweisung versucht aber hilft nichts.Kann mir einer sagen was ich falsch gemacht habe.

Java:
public class Ladungssicherung extends AppCompatActivity implements AdapterView.OnItemSelectedListener {



    private EditText gewichtinput;
    private EditText winkelinput;
    private String text;
    private double k = 1.5;
    private int cZ = 1; // beschleunigungsbeiwert nach unten
    private double cX = 0.8; // beschleunigungsbeiwert nach vorne


    Dialog epicDialog;
    TextView unicode, ergebnissFeld;
    ImageView muinfoButton, closemuButton, infoalphaButton;

    @SuppressLint("StringFormatInvalid")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_ladungssicherung);

        winkelinput = (EditText)findViewById(R.id.winkelInput);
        ergebnissFeld= (TextView)findViewById(R.id.ergebniss);
        gewichtinput = (EditText)findViewById(R.id.gewichtInput);


        SharedPreferences sharedPreferences = getSharedPreferences("sharedPrefs", MODE_PRIVATE);
        text = sharedPreferences.getString("text", "");
        winkelinput.setText(text);
        sharedPreferences.edit().remove("text").commit();

    epicDialog = new Dialog(this, android.R.style.Theme_DeviceDefault_Light_NoActionBar_Fullscreen);


        muinfoButton = (ImageView) findViewById(R.id.infomuIcon);
        closemuButton = (ImageView)findViewById(R.id.closemuinfo);
        infoalphaButton = (ImageView)findViewById(R.id.infoalpha);

        muinfoButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showmuinfo();


            }
        });

        infoalphaButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showalphawinkel();
            }
        });


        //Spinner code
        Spinner spinner = findViewById(R.id.spinner1);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.numbers, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        spinner.setOnItemSelectedListener(this);



    }

    public void showalphawinkel(){

       Intent intent = new Intent(this, WinkelmessActivity.class);
       startActivity(intent);


    }




    public void showmuinfo(){

        epicDialog.setContentView(R.layout.muinfo);
        closemuButton = (ImageView) epicDialog.findViewById(R.id.closemuinfo);

        closemuButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                epicDialog.dismiss();
            }
        });

        epicDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        epicDialog.show();
    }





        @Override
        public void onItemSelected (AdapterView < ? > parent, View view,int position, long id){

    }

        @Override
        public void onNothingSelected (AdapterView < ? > parent){

    }

        public void ergebnissFromel(View v){

        EditText feld1 = (EditText) findViewById(R.id.gewichtInput);
        EditText feld2 = (EditText) findViewById(R.id.winkelInput);
        EditText feld3 = (EditText) findViewById(R.id.stfInput);
        Spinner feld4 = (Spinner) findViewById(R.id.spinner1);

        Integer zahl1 = Integer.parseInt(feld1.getText().toString());
        Integer zahl2 = Integer.parseInt(feld2.getText().toString());
        Integer zahl3 = Integer.parseInt(feld3.getText().toString());

        String spinner = feld4.getSelectedItem().toString();

        if(feld1.equals("") ){
            Toast.makeText(this, "Bitte geben Sie den Winkel an", Toast.LENGTH_SHORT).show();

        }
            if(feld2.equals("")){
                Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();

            }

            if(feld3.equals("")){
                Toast.makeText(this, "Bitte geben Sie den STF an", Toast.LENGTH_SHORT).show();

            }



// Grad wird in sinus alpha umgerechnet
        double newsinus = Math.sin(Math.toRadians(Float.valueOf(zahl2)));

        double wert1 = cX-Float.valueOf(spinner)*cZ;
        double wert2 = Float.valueOf(spinner)*newsinus;

// Formel Niederzurren Algorithmus
        double wert3 = wert1*zahl1;
        double wert4 = wert2*k;
        double wert5 = wert3/wert4;
        double wert6 = Math.round(wert5);
        double wert7 = wert6/zahl3;
        double wert8 = Math.ceil(wert7);

        ergebnissFeld.setText(String.valueOf(Math.round(wert8)));


        }

        }
 

mrBrown

Super-Moderator
Mitarbeiter
Aktuell benutzt du erst den Wert des Feldes, und prüfst danach, ob es leer war.

Du solltest vor der Benutzung prüfen, und das nicht nur auf leer, sondern auch auf null.
 

brilzi89

Bekanntes Mitglied
bekomme immer das von Logcat:
12-14 18:28:28.130 5760-5760/com.example.michi.trucki E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.michi.trucki, PID: 5760
java.lang.IllegalStateException: Could not execute method for android:eek:nClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
at android.view.View.performClick(View.java:5675)
at android.view.View$PerformClick.run(View.java:22641)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
at android.view.View.performClick(View.java:5675)
at android.view.View$PerformClick.run(View.java:22641)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
Caused by: java.lang.NumberFormatException: For input string: ""
at java.lang.Integer.parseInt(Integer.java:533)
at java.lang.Integer.parseInt(Integer.java:556)
at com.example.michi.trucki.Ladungssicherung.ergebnissFromel(Ladungssicherung.java:140)
at java.lang.reflect.Method.invoke(Native Method)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:384)
at android.view.View.performClick(View.java:5675)
at android.view.View$PerformClick.run(View.java:22641)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)

wäre das so richtig mit meinem code?
Java:
        public void ergebnissFromel(View v){
            Spinner feld4 = (Spinner) findViewById(R.id.spinner1);

            Integer zahl1 = Integer.parseInt(gewichtinput.getText().toString());
            Integer zahl2 = Integer.parseInt(winkelinput.getText().toString());
            Integer zahl3 = Integer.parseInt(stfinput.getText().toString());

            String spinner = feld4.getSelectedItem().toString();


        if ( zahl1.equals("") || zahl1 == null){
            Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();

            }
            if ( zahl2.equals("") || zahl2 == null){
                Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();

            }

            if ( zahl3.equals("") || zahl3 == null){
                Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();

            }
else {

// Grad wird in sinus alpha umgerechnet
            double newsinus = Math.sin(Math.toRadians(Float.valueOf(zahl2)));

            double wert1 = cX - Float.valueOf(spinner) * cZ;
            double wert2 = Float.valueOf(spinner) * newsinus;

// Formel Niederzurren Algorithmus
            double wert3 = wert1 * zahl1;
            double wert4 = wert2 * k;
            double wert5 = wert3 / wert4;
            double wert6 = Math.round(wert5);
            double wert7 = wert6 / zahl3;
            double wert8 = Math.ceil(wert7);

            ergebnissFeld.setText(String.valueOf(Math.round(wert8)));

        }
        }

        }
 

brilzi89

Bekanntes Mitglied
Für welches if greift denn dein else? ;)
habs jetzt so gemacht:
Java:
        Spinner feld4 = (Spinner) findViewById(R.id.spinner1);

        Integer zahl1 = 0;
        Integer zahl2 = 0;
        Integer zahl3 = 0;

        try {
            zahl1 = Integer.parseInt(gewichtinput.getText().toString());
            zahl2 = Integer.parseInt(winkelinput.getText().toString());
            zahl3 = Integer.parseInt(stfinput.getText().toString());

        } catch (Exception e) {
            Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
            return;
        }

        String spinner = feld4.getSelectedItem().toString();



            // Grad wird in sinus alpha umgerechnet
            double newsinus = Math.sin(Math.toRadians(Float.valueOf(zahl2)));

            double wert1 = cX - Float.valueOf(spinner) * cZ;
            double wert2 = Float.valueOf(spinner) * newsinus;

            // Formel Niederzurren Algorithmus
            double wert3 = wert1 * zahl1;
            double wert4 = wert2 * k;
            double wert5 = wert3 / wert4;
            double wert6 = Math.round(wert5);
            double wert7 = wert6 / zahl3;
            double wert8 = Math.ceil(wert7);

            ergebnissFeld.setText(String.valueOf(Math.round(wert8)));

        }
    }
 

brilzi89

Bekanntes Mitglied
Das ist keine Lösung: vorher hättest Du (zwar falsche aber immerhin) benutzerfreundliche Fehlermeldungen ausgegeben.

Ein wenig Struktur würde Deinem Code ebenso wenig schaden wie halbwegs vernünftige Variablennamen. zahl1, zahl2, zahl3, wert1, wert2 -> WTF?!?

ich persönlich komme mit den Namen ganz gut klar, und habe ne gute übersicht.
 

mihe7

Top Contributor
ich persönlich komme mit den Namen ganz gut klar, und habe ne gute übersicht.
Ja, das sieht man:
Java:
    Integer zahl2 = Integer.parseInt(feld2.getText().toString());
    ...
    if(feld2.equals("")){
         Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();
    }
    ...
    double newsinus = Math.sin(Math.toRadians(Float.valueOf(zahl2)));
 

brilzi89

Bekanntes Mitglied
Ja, das sieht man:
Java:
    Integer zahl2 = Integer.parseInt(feld2.getText().toString());
    ...
    if(feld2.equals("")){
         Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();
    }
    ...
    double newsinus = Math.sin(Math.toRadians(Float.valueOf(zahl2)));

muss mir halt alles selber mit youtube und Hilfe bei bringen :/
 

mihe7

Top Contributor
Deswegen verzichtet man doch nicht auf vernünftige Bezeichner.

Wenn Du den Ausschnitt
Java:
    if(feld2.equals("")){
         Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();
    }
betrachtest, kannst Du nicht entscheiden, ob er in sich stimmig ist. Falls feld2 das Gewicht ist, ja, sonst sein. Um herauszufinden, was feld2 ist, muss man erstmal suchen. Wenn es dumm läuft, dann findest Du das erst in irgendwelchen xml-/properties-Dateien.

Zum Vergleich:
Java:
    if (winkel.equals("")) {
         Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();
    }
Der Ausschnitt reicht, um zu sehen, dass "Gewicht" und winkel nicht zueinander passen.
 

brilzi89

Bekanntes Mitglied
Deswegen verzichtet man doch nicht auf vernünftige Bezeichner.

Wenn Du den Ausschnitt
Java:
    if(feld2.equals("")){
         Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();
    }
betrachtest, kannst Du nicht entscheiden, ob er in sich stimmig ist. Falls feld2 das Gewicht ist, ja, sonst sein. Um herauszufinden, was feld2 ist, muss man erstmal suchen. Wenn es dumm läuft, dann findest Du das erst in irgendwelchen xml-/properties-Dateien.

Zum Vergleich:
Java:
    if (winkel.equals("")) {
         Toast.makeText(this, "Bitte geben Sie das Gewicht an", Toast.LENGTH_SHORT).show();
    }
Der Ausschnitt reicht, um zu sehen, dass "Gewicht" und winkel nicht zueinander passen.

da gebe ich dir recht, werde es mal ändern:) werde mich auch bemühen es besser zu machen :).
 

brilzi89

Bekanntes Mitglied
Habs jetzt doch mit if und else hinbekommen:)

Java:
 Spinner feld4 = (Spinner) findViewById(R.id.spinner1);
        String spinner = feld4.getSelectedItem().toString();
        EditText gewicht= (EditText) findViewById(R.id.gewichtInput);
        EditText winkel = (EditText) findViewById(R.id.winkelInput);
        EditText stf = (EditText) findViewById(R.id.stfInput);


        if (gewicht.getText().length() != 0 && winkel.getText().length() != 0 && stf.getText().length() != 0 ) {

            double w1 = Double.parseDouble(gewicht.getText().toString());
            double w2 = Double.parseDouble(winkel.getText().toString());
            double w3 = Double.parseDouble(stf.getText().toString());

            double newsinus = Math.sin(Math.toRadians((w2)));
            double w4 = cX - Float.valueOf(spinner) * cZ;
            double w5= Float.valueOf(spinner) * newsinus;

            // Formel Niederzurren Algorithmus
            double w6 = w4 * w1;
            double w7 = w5 * k;
            double w8 = w6 / w7;
            double w9 = Math.round(w8);
            double w10 = w9 / w3;
            double w11 = Math.ceil(w10);

            ergebnissFeld.setText(String.valueOf(Math.round(w11)));

        }
        else {


            Toast.makeText(this, "Bitte geben Sie alle Daten an",Toast.LENGTH_SHORT).show();
        }
        }
    }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Menü Header App Absturz bei Headeränderungen Android & Cross-Platform Mobile Apps 49
MaxG. Android Absturz bei Aufruf von onClickListener() Android & Cross-Platform Mobile Apps 8
M Android onClick führt zu Absturz Android & Cross-Platform Mobile Apps 8
B Android Bei Absturz Fehlerdatei erzeugen Android & Cross-Platform Mobile Apps 2
P CameraView - Absturz Android & Cross-Platform Mobile Apps 19
N Android Retain-Fragment + ActionBar-Tabs = Absturz!? Android & Cross-Platform Mobile Apps 9
T App Absturz bei Wechsel von WLAN zu mobilem Internet bzw. andersrum Android & Cross-Platform Mobile Apps 5
N Android bei Animation Absturz Android & Cross-Platform Mobile Apps 10
Besset Android Edittext onTextChange endlosschleife Android & Cross-Platform Mobile Apps 2
A Mehrere EditText-Komponenten sollen zusammenarbeiten Android & Cross-Platform Mobile Apps 2
S Android Absoluter Neuling: EditText zur Laufzeit verändern bzw. über Button Android & Cross-Platform Mobile Apps 2
M Android Edittext width passend zum Text Android & Cross-Platform Mobile Apps 1
S Dynamische EditText View eingaben in Datenbank speichern Android & Cross-Platform Mobile Apps 0
D Android EditText und TextView haben unterschiedliche größen innerhalb einer TableRow Android & Cross-Platform Mobile Apps 18
C EditText Android & Cross-Platform Mobile Apps 1
N Android EditText.setError() funktioniert nicht nach Rotation Android & Cross-Platform Mobile Apps 1
N Android EditText: Numpad statt Tastatur einblenden Android & Cross-Platform Mobile Apps 2
P Android EditText zeigt keine Umlaute Android & Cross-Platform Mobile Apps 6
P EditText mehrere Zeilen - verschiedene Farbe Android & Cross-Platform Mobile Apps 3

Ähnliche Java Themen

Neue Themen


Oben