[ERLEDIGT] Hilfe bei Fehler in Quellcode benötigt

L

LarsBadm31

Neues Mitglied
0
Hallo liebe Community,
ich habe folgenden Code in Android Studio geschrieben. Im Editor wird mir auch kein Fehler angezeigt. Wenn ich nun allerdings die App auf meinem Handy ausführen lasse, stürzt diese ab, sobald ich auf den Speicher-Button drücke. Kann mir einer sagen wo der Fehler liegt?
Danke schonmal im Vorraus :)




Code:
package de_larsd.abrechnung;

import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Spinner;
import android.widget.Toast;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class NeuerEintragAcitivity extends AppCompatActivity {

    Context cxt = this;
    Spinner spinner;
    Button btnSpeichern;
    DatePicker dp;

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

        //Initalisierung Spinner
        spinner =  (Spinner) findViewById(R.id.spinner);
        String [] times = {"1","1.5", "2"};
        ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, times);
        spinner.setAdapter(adapter);

        //Initalisierung Button
        btnSpeichern = (Button) findViewById(R.id.btnSpeichern);
        btnSpeichern.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                double  gehalt = berechneGehalt();
                //String datum = getDatum();
                speicher(gehalt);
            }
        });

    }

    private boolean saveToFile(String dateiname, String text){
        //Wahrheitswert, um zu prüfen, ob das Speichern erfolgreich war
        boolean b = true;
        FileOutputStream fos = null;
        try {
            //Öffne privaten FileOutputStream
            fos = cxt.openFileOutput(dateiname, Context.MODE_PRIVATE);
        } catch (FileNotFoundException e) {
            //Fehler beim Speichern
            b = false;
        }
        try {
            //Schreibe Text in die Datei
            fos.write(text.getBytes());
        } catch (IOException e) {
            //Fehler beim Speichern
            b = false;
        }
        try {
            //Schließe den FileOutputStream
            fos.close();
        } catch (IOException e) {
            //Fehler beim Speichern
            b = false;
        }
        return b;
    }

    private String readFromFile(String dateiname){
        String a = "";
        try {
            FileInputStream fis = cxt.openFileInput(dateiname);
            try {
                byte b[] = new byte[(int) fis.getChannel().size()];
                fis.read(b);
                a = new String(b);
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return a;
    }

    public double berechneGehalt() {
        String zwischen = spinner.getSelectedItem().toString();
        Double zeit = Double.valueOf(zwischen);
        double ende = zeit * 7.5;
        return ende;
    }

    public String getDatum() {
        int tag, monat, jahr;
        String datum;
        tag = dp.getDayOfMonth();
        monat = dp.getMonth();
        jahr = dp.getYear();
        datum = tag + "-" + monat + "-" + jahr;
        return datum;
    }

    public void speicher(double gehalt) {
        //neuen Wert in summe.txt speichern
        String alter = readFromFile("summe.txt");
        double alt = Double.valueOf(alter);
        double neu = alt * gehalt;
        String sp = String.valueOf(neu);
        if(saveToFile("summe.txt", sp) == true) {
            Toast.makeText(getApplicationContext(), "Gespeichert", Toast.LENGTH_SHORT).show();
        }
        else{
            Toast.makeText(getApplicationContext(), "Ein Fehler ist aufgetreten", Toast.LENGTH_SHORT).show();
        }

    }
}
 
LogCat bitte mit angeben. Blockierst den UI-Thread wohl aber das kann man nicht zu 100% ohne den LogCat sagen, hier ist es wohl ersichtlicher aber in Zukunft Fehler im LogCat bitte mit angeben, dann kann man dir besser helfen.
 
Vielen Dank für die rasche Antwort. Konnte dank der Logcat zwei meiner Fehler beheben. Eines bleibt allerdings: Hier der Log: Weiß zufällig auch noch einer woran dies liegt? Ich weiß nur, dass es mit dem DatePicker zusammenhängt.
PS: Nehmt es mir nicht übel wenn es sich um einen offensichtlichen Fehler handelt, ich bin noch neu in der Android-Entwicklung ... :)


Code:
06-24 22:53:13.264 29911-29911/de_larsd.abrechnung E/AndroidRuntime: FATAL EXCEPTION: main
                                                                     Process: de_larsd.abrechnung, PID: 29911
                                                                     java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.DatePicker.getDayOfMonth()' on a null object reference
                                                                         at de_larsd.abrechnung.NeuerEintragAcitivity.getDatum(NeuerEintragAcitivity.java:106)
                                                                         at de_larsd.abrechnung.NeuerEintragAcitivity$1.onClick(NeuerEintragAcitivity.java:42)
                                                                         at android.view.View.performClick(View.java:5340)
                                                                         at android.view.View$PerformClick.run(View.java:21610)
                                                                         at android.os.Handler.handleCallback(Handler.java:815)
                                                                         at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                         at android.os.Looper.loop(Looper.java:207)
                                                                         at android.app.ActivityThread.main(ActivityThread.java:5776)
                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
 
Hallo Lars,
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.DatePicker.getDayOfMonth()' on a null object reference

In dem moment , wo du getDayOfMonth lesen möchtest , ist dein DatePicker null.
Das heist , dass du vorher vergessen hast, ihn zu initialisieren.
 
Alles klar vielen Dank...konnte das Problem lösen ;)
 

Ähnliche Themen

D
Antworten
23
Aufrufe
2.312
Data2006
D
R
  • RudolfHagen
Antworten
1
Aufrufe
629
koje71
koje71
S
Antworten
9
Aufrufe
1.135
swa00
swa00
Zurück
Oben Unten