# Absturz der App bei leeren Edittext



## brilzi89 (14. Dez 2018)

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.


```
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 (14. Dez 2018)

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 (14. Dez 2018)

mrBrown hat gesagt.:


> 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.



ok danke ich schau mal


----------



## brilzi89 (14. Dez 2018)

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 androidnClick
        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?

```
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)));

        }
        }

        }
```


----------



## mrBrown (14. Dez 2018)

Für welches if greift denn dein else?


----------



## brilzi89 (14. Dez 2018)

mrBrown hat gesagt.:


> Für welches if greift denn dein else?


habs jetzt so gemacht:

```
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)));

        }
    }
```


----------



## mrBrown (14. Dez 2018)

Mit if-else solltest du es trotzdem lösen können, dass sind absolute Grundlagen...


----------



## mihe7 (15. Dez 2018)

brilzi89 hat gesagt.:


> habs jetzt so gemacht:


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?!?


----------



## brilzi89 (15. Dez 2018)

mihe7 hat gesagt.:


> 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.


----------



## brilzi89 (15. Dez 2018)

v


brilzi89 hat gesagt.:


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


versuche es jetzt mal mit try catch


----------



## mihe7 (15. Dez 2018)

brilzi89 hat gesagt.:


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


Ja, das sieht man:

```
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 (15. Dez 2018)

mihe7 hat gesagt.:


> Ja, das sieht man:
> 
> ```
> Integer zahl2 = Integer.parseInt(feld2.getText().toString());
> ...



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


----------



## mihe7 (15. Dez 2018)

Deswegen verzichtet man doch nicht auf vernünftige Bezeichner. 

Wenn Du den Ausschnitt

```
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:

```
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 (15. Dez 2018)

mihe7 hat gesagt.:


> Deswegen verzichtet man doch nicht auf vernünftige Bezeichner.
> 
> Wenn Du den Ausschnitt
> 
> ...



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


----------



## brilzi89 (15. Dez 2018)

Habs jetzt doch mit if und else hinbekommen


```
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();
        }
        }
    }
```


----------

