Android App stürzt ab

  • Antworten:5
Straxel_
  • Forum-Beiträge: 3

28.05.2016, 15:52:49 via Website

Hi Leute, bin neu hier im Forum und noch neu bei der Android Appentwicklung :)

Habe allerdings ein Problem das für euch wahrscheinlich nicht schwer zu lösen ist, allerdings find ich den Fehler einfach nicht.

Ich habe erstmal ein Miniprogramm geschrieben welches Eingegebene Werte in einer Formel verrechnet und wieder ausgeben soll. Android Studio zeigt mir keinen Fehler an, allerdings stürzt die App beim öffnen direkt ab.

Zum Testen benutz ich das LG G4 welches an Android Studio angeschlossen ist.

Gruß Alex

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

28.05.2016, 15:55:59 via Website

Wenn AndroidStudio keine Fehler zeigt, heißt das nur, dass der Code von der Syntax her richtig ist.
Aber:
Es gibt LogCat, darin werden alle Events Fehler etc. geloggt.
Beim öffnen der App sollten da rote Zeilen zu sehen sein.
Poste diese in zusammenhang mit deinem Code mal hier

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Straxel_
  • Forum-Beiträge: 3

28.05.2016, 16:01:42 via Website

Ou ja den Code hab ich ganz vergessen zu posten :)

package de.spins.rc.rcspinscalculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private EditText Eingabe;                                               //Deklarieren Eingabefelder
private EditText Eingabe2;
private EditText Eingabe3;
private EditText Eingabe4;
private EditText Eingabe5;
private EditText Eingabe6;
private EditText Eingabe7;
private Button BerechneWirkungsgrad;
private TextView Wirkungsgradergebnis;

double Motoranzahl;                                                            //Variablen für Formelrechnung
double Propellerdurchmesser;
double Zellenanzahl;
double Kapazitaet;
double ModellLeer;
double AkkuLeer;
double Schwebeflugzeit;

double Komplettgewicht;                                                     //Extra Variablen
double Potenz;
double Motorwurzel;
double Propellermm;
double betaWirkungsgrad;

double Wirkungsgrad;






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

    Eingabe = (EditText) findViewById(R.id.editText);                   //Initialisieren der GUI Elemente und ausziehen der Werte
    Eingabe2 = (EditText) findViewById(R.id.editText2);
    Eingabe3 = (EditText) findViewById(R.id.editText3);
    Eingabe4 = (EditText) findViewById(R.id.editText4);
    Eingabe5 = (EditText) findViewById(R.id.editText5);
    Eingabe6 = (EditText) findViewById(R.id.editText6);
    Eingabe7 = (EditText) findViewById(R.id.editText7);
    Wirkungsgradergebnis = (TextView) findViewById(R.id.Wirkungsgradergebnis);



    BerechneWirkungsgrad.setOnClickListener(new View.OnClickListener(){

        //@Override
        public void onClick(View v) {
            Motoranzahl = Double.parseDouble(Eingabe.getText().toString());
            Propellerdurchmesser = Double.parseDouble(Eingabe.getText().toString());
            Zellenanzahl = Double.parseDouble(Eingabe.getText().toString());
            Kapazitaet = Double.parseDouble(Eingabe.getText().toString());
            ModellLeer = Double.parseDouble(Eingabe.getText().toString());
            AkkuLeer = Double.parseDouble(Eingabe.getText().toString());
            Schwebeflugzeit = Double.parseDouble(Eingabe.getText().toString());


            Komplettgewicht = ModellLeer + AkkuLeer;
            Potenz = Math.pow(Komplettgewicht, 1.5);
            Motorwurzel = Math.sqrt(Motoranzahl);
            Propellermm = Propellerdurchmesser * 25;


            betaWirkungsgrad = 0.32 * ((Motorwurzel * Propellermm * Zellenanzahl * Kapazitaet) / (Potenz));     //Formelberechnung

            Wirkungsgrad = Schwebeflugzeit / betaWirkungsgrad;



            Wirkungsgradergebnis.setText(String.valueOf(Wirkungsgrad));





        }


    });






}

}

Und hier ist der Fehler:

05-28 15:49:41.730 2701-2701/de.spins.rc.rcspinscalculator E/AndroidRuntime: FATAL EXCEPTION: main
                                                                         Process: de.spins.rc.rcspinscalculator, PID: 2701
                                                                         java.lang.RuntimeException: Unable to start activity ComponentInfo{de.spins.rc.rcspinscalculator/de.spins.rc.rcspinscalculator.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2434)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494)
                                                                             at android.app.ActivityThread.access$900(ActivityThread.java:157)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                             at android.os.Looper.loop(Looper.java:148)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5525)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
                                                                          Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                                                                             at de.spins.rc.rcspinscalculator.MainActivity.onCreate(MainActivity.java:61)
                                                                             at android.app.Activity.performCreate(Activity.java:6272)
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2387)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2494) 
                                                                             at android.app.ActivityThread.access$900(ActivityThread.java:157) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1356) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                             at android.os.Looper.loop(Looper.java:148) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5525) 
                                                                             at java.lang.reflect.Method.invoke(Native Method) 
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620) 

Antworten
Straxel_
  • Forum-Beiträge: 3

28.05.2016, 17:17:20 via Website

Super. Vielen Dank :)

Hab jetzt noch damit das ergebnis gerundet wird noch math.round eingefügt, da ich die Variable wirkungsgrad nicht so eingeben konnte, "(Wirkungsgrad, 2)" habe ich es mit mal 1000 / 100 probiert aber bekomme nichts ordentliches raus.
in c# also visual studio konnte ich einfang Math.Round(Wirkungsgrad, 2) benutzen

package de.spins.rc.rcspinscalculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

private EditText Eingabe;                                               //Deklarieren Eingabefelder
private EditText Eingabe2;
private EditText Eingabe3;
private EditText Eingabe4;
private EditText Eingabe5;
private EditText Eingabe6;
private EditText Eingabe7;
private Button BerechneWirkungsgrad;
private TextView Wirkungsgradergebnis;

double Motoranzahl;                                                            //Variablen für Formelrechnung
double Propellerdurchmesser;
double Zellenanzahl;
double Kapazitaet;
double ModellLeer;
double AkkuLeer;
double Schwebeflugzeit;

double Komplettgewicht;                                                     //Extra Variablen
double Potenz;
double Motorwurzel;
double Propellermm;
double betaWirkungsgrad;

double Wirkungsgrad;






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

    Eingabe = (EditText) findViewById(R.id.editText);                   //Initialisieren der GUI Elemente und ausziehen der Werte
    Eingabe2 = (EditText) findViewById(R.id.editText2);
    Eingabe3 = (EditText) findViewById(R.id.editText3);
    Eingabe4 = (EditText) findViewById(R.id.editText4);
    Eingabe5 = (EditText) findViewById(R.id.editText5);
    Eingabe6 = (EditText) findViewById(R.id.editText6);
    Eingabe7 = (EditText) findViewById(R.id.editText7);
    BerechneWirkungsgrad = (Button) findViewById(R.id.wgradbutton);
    Wirkungsgradergebnis = (TextView) findViewById(R.id.Wirkungsgradergebnis);



    BerechneWirkungsgrad.setOnClickListener(new View.OnClickListener(){

        //@Override
        public void onClick(View v) {
            Motoranzahl = Double.parseDouble(Eingabe.getText().toString());
            Propellerdurchmesser = Double.parseDouble(Eingabe.getText().toString());
            Zellenanzahl = Double.parseDouble(Eingabe.getText().toString());
            Kapazitaet = Double.parseDouble(Eingabe.getText().toString());
            ModellLeer = Double.parseDouble(Eingabe.getText().toString());
            AkkuLeer = Double.parseDouble(Eingabe.getText().toString());
            Schwebeflugzeit = Double.parseDouble(Eingabe.getText().toString());


            Komplettgewicht = ModellLeer + AkkuLeer;
            Potenz = Math.pow(Komplettgewicht, 1.5);
            Motorwurzel = Math.sqrt(Motoranzahl);
            Propellermm = Propellerdurchmesser * 25;


            betaWirkungsgrad = 0.32 * ((Motorwurzel * Propellermm * Zellenanzahl * Kapazitaet) / (Potenz));     //Formelberechnung

            Wirkungsgrad = Schwebeflugzeit / betaWirkungsgrad;
            Wirkungsgrad = Math.round(Wirkungsgrad *1000)/1000;//hgdztdz



            Wirkungsgradergebnis.setText(String.valueOf(Wirkungsgrad));





        }


    });






}

}

Antworten
pepperonas
  • Forum-Beiträge: 434

31.05.2016, 15:02:46 via Website

Hallo Straxel_,
"aber bekomme nichts ordentliches raus" ist leider keine besonders gute Fehlerbeschreibung. Ich vermute, dass du auf zwei Nachkommastellen runden willst, richtig? "Typ-Cast" lautet hier das Zauberwort.

Math.round(Wirkungsgrad * 1000d) / 1000d;

oder

Math.round(Wirkungsgrad * 1000.0) / 1000.0;

und wenn du die Ausgabe formatieren willst kannst du das wie folgt (hier wird aber nicht gerundet!):

double d = 1.2345;
DecimalFormat df = new DecimalFormat("##.00");
System.out.println(df.format(d));

Übrigens: Variablen schreibt man klein, Klassen groß. :)

Open Source

Antworten