Absturz der App bei leeren Edittext

Bitte aktiviere JavaScript!
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)));


        }

        }
 
A

Anzeige




Vielleicht hilft dir unser Java-Tutorial hier weiter —> (hier klicken)
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.
 
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)));

        }
        }

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

        }
    }
 
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.
 
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)));
 
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 :/
 
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.
 
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 :).
 
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();
        }
        }
    }
 
A

Anzeige




Hier lernst du alle wichtigen Java-Grundlagen.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben