Dateien Speichern

Diskutiere Dateien Speichern im Mobile Geräte Forum; Hi, ich bin beim Programmieren mit Java noch sehr unerfahren. Ich versuche ein Spiel für Android zu programmieren. Dabei sollen Variablen...

  1. Battleju
    Battleju Mitglied
    Hi,
    ich bin beim Programmieren mit Java noch sehr unerfahren. Ich versuche ein Spiel für Android zu programmieren. Dabei sollen Variablen gespeichert werden, um nach einem erneuten Starten der App nicht von vorne anfangen zu müssen. Jedoch schließt sich die App("App wurde leider beendet"). Mit dem Debugger komm folgender Fehler:
    Ich überlege nun seit Stunden und finde die Ursache nicht...:(
    Ich hoffe ihr könnt mir helfen.
    Kompletter Soure code:
    (1. class)
    Code (Java):
    package ihack.battl.de.ihack;

    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.view.View.OnClickListener;
    import android.widget.Toast;

    public class Start extends AppCompatActivity implements OnClickListener {
          Button boption1,boption2,hilfe;
          static SharedPreferences speicher;
          static Editor editor;

        static int savewert=0;
        static int test;
        static float bitstart,syslvl,kdollar,dollarmulti,score,bitcoin,przwert,grakawert;
        static float prz,twertgegner,twertspieler,adwertspieler,swertspieler,x,option1z,option2,option2_1,option3,option4,swertgegner1,twertgegner1,adwertgegner1,gdollar1,score1,escore1,swertgegner2,twertgegner2,adwertgegner2,gdollar2,score2,escore2,swertgegner3,twertgegner3,adwertgegner3,gdollar3,score3,escore3;
        static int przmulti,agswwert,prgswwert;
        static int preis1,preis2,preis3,preis4;
        static long psccode,altpsccode;
        static float angpsccode;

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

            boption1= (Button)findViewById(R.id.bNeuesSpiel);
            boption2= (Button)findViewById(R.id.bSpielLaden);
            hilfe = (Button)findViewById(R.id.bHilfe);


            boption1.setOnClickListener(this);
            boption2.setOnClickListener(this);
            hilfe.setOnClickListener(this);

            speicher = getApplicationContext().getSharedPreferences("Wert",0);
            if(1 == savewert){
                editor.putInt("Data1",preis1);
                editor.commit();
                editor.putInt("Data2",preis2);
                editor.commit();
                editor.putInt("Data3",preis3);
                editor.commit();
                editor.putInt("Data4",preis4);
                editor.commit();
                editor.putFloat("Data5",x);
                editor.commit();
                editor.putFloat("Data6",bitstart);
                editor.commit();
                editor.putFloat("Data7",syslvl);
                editor.commit();
                editor.putFloat("Data8",kdollar);
                editor.commit();
                editor.putFloat("Data9",dollarmulti);
                editor.commit();
                editor.putFloat("Data10",score);
                editor.commit();
                editor.putFloat("Data11",bitcoin);
                editor.commit();
                editor.putFloat("Data12",przwert);
                editor.commit();
                editor.putFloat("Data13",grakawert);
                editor.commit();
                editor.putInt("Data14",przmulti);
                editor.commit();
                editor.putInt("Data15",agswwert);
                editor.commit();
                editor.putInt("Data16",prgswwert);
                editor.commit();
                editor.putLong("Data17",psccode);
                editor.commit();
                editor.putLong("Data18",altpsccode);
                editor.commit();
                editor.putInt("TestData",test);
                editor.commit();
                Toast.makeText(this, "Spielstand gespeichert",Toast.LENGTH_LONG).show();
            }
        }

        public void onClick(View e){
            int eingabe = e.getId();
            if(eingabe==R.id.bNeuesSpiel){
                test= 1;
                preis1=2;
                preis2=3;
                preis3=1;
                preis4=1;
                przwert= (float) 0.1;
                przmulti=1;
                agswwert=1;
                prgswwert=1;
                grakawert=150;
                dollarmulti=1;
                x=1;
                syslvl=1;
                kdollar=100;
                score=0;
                bitstart=0;
                bitcoin=0;
                psccode=0;
                altpsccode=0;

                Intent intent = new Intent(Start.this, game.class);
                startActivity(intent);
            }
            if(eingabe==R.id.bSpielLaden) {
                if(speicher.getInt("TestData",0)!=0){
                    speicher.getInt("Data1",preis1);
                    speicher.getInt("Data2",preis2);
                    speicher.getInt("Data3",preis3);
                    speicher.getInt("Data4",preis4);
                    speicher.getFloat("Data5",x);
                    speicher.getFloat("Data6",bitstart);
                    speicher.getFloat("Data7",syslvl);
                    speicher.getFloat("Data8",kdollar);
                    speicher.getFloat("Data9",dollarmulti);
                    speicher.getFloat("Data10",score);
                    speicher.getFloat("Data11",bitcoin);
                    speicher.getFloat("Data12",przwert);
                    speicher.getFloat("Data13",grakawert);
                    speicher.getInt("Data14",przmulti);
                    speicher.getInt("Data15",agswwert);
                    speicher.getInt("Data16",prgswwert);
                    speicher.getLong("Data17",psccode);
                    speicher.getLong("Data18",altpsccode);
                    Intent intent = new Intent(Start.this, game.class);
                    startActivity(intent);
                }else{
                    Toast.makeText(this, "Kein Spielstand vorhanden",Toast.LENGTH_LONG).show();
                }

            }

        }
        public static void speichern(){
            editor.putInt("Data1",preis1);
            editor.putInt("Data2",preis2);
            editor.putInt("Data3",preis3);
            editor.putInt("Data4",preis4);
            editor.putFloat("Data5",x);
            editor.putFloat("Data6",bitstart);
            editor.putFloat("Data7",syslvl);
            editor.putFloat("Data8",kdollar);
            editor.putFloat("Data9",dollarmulti);
            editor.putFloat("Data10",score);
            editor.putFloat("Data11",bitcoin);
            editor.putFloat("Data12",przwert);
            editor.putFloat("Data13",grakawert);
            editor.putInt("Data14",przmulti);
            editor.putInt("Data15",agswwert);
            editor.putInt("Data16",prgswwert);
            editor.putLong("Data17",psccode);
            editor.putLong("Data18",altpsccode);
            editor.putInt("TestData",test);
        }
    (2. class)
    Code (Java):
    package ihack.battl.de.ihack;


    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.view.View.OnClickListener;


    import static ihack.battl.de.ihack.Start.adwertspieler;
    import static ihack.battl.de.ihack.Start.agswwert;
    import static ihack.battl.de.ihack.Start.altpsccode;
    import static ihack.battl.de.ihack.Start.bitcoin;
    import static ihack.battl.de.ihack.Start.bitstart;
    import static ihack.battl.de.ihack.Start.dollarmulti;
    import static ihack.battl.de.ihack.Start.grakawert;
    import static ihack.battl.de.ihack.Start.kdollar;
    import static ihack.battl.de.ihack.Start.preis1;
    import static ihack.battl.de.ihack.Start.preis2;
    import static ihack.battl.de.ihack.Start.preis3;
    import static ihack.battl.de.ihack.Start.preis4;
    import static ihack.battl.de.ihack.Start.prgswwert;
    import static ihack.battl.de.ihack.Start.prz;
    import static ihack.battl.de.ihack.Start.przmulti;
    import static ihack.battl.de.ihack.Start.przwert;
    import static ihack.battl.de.ihack.Start.psccode;
    import static ihack.battl.de.ihack.Start.score;
    import static ihack.battl.de.ihack.Start.speichern;
    import static ihack.battl.de.ihack.Start.swertspieler;
    import static ihack.battl.de.ihack.Start.syslvl;
    import static ihack.battl.de.ihack.Start.test;
    import static ihack.battl.de.ihack.Start.twertspieler;
    import static ihack.battl.de.ihack.Start.x;
    import ihack.battl.de.ihack.Start;
    public class game extends AppCompatActivity implements OnClickListener {

        Button b,bs;



        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            var();
            setContentView(R.layout.activity_game_menue);
            TextView textView = (TextView) findViewById(R.id.werte);
            textView.setText("Systemlevel: " + syslvl + "\nScanwert: " + swertspieler + "\nTrojanawert: " + twertspieler + "\nAdwarewert: " + adwertspieler + "\n" + kdollar + "Dollar im Besitz");
            b= (Button)findViewById(R.id.b);
            bs=(Button)findViewById(R.id.save);
            b.setOnClickListener(this);
            bs.setOnClickListener(this);


        }
        public void var(){
            kdollar= (float) (Math.round(100.0 * kdollar) / 100.0);
            if (bitstart==1)
            {
                bitcoin+=grakawert/100000;
            } // end of if bitminer

            prz=przwert*przmulti;
            swertspieler=agswwert+100+(syslvl*(prz/5));
            twertspieler=prgswwert+100+(syslvl*(prz/5));
            adwertspieler=prgswwert+100+(syslvl*(prz/5));
            syslvl= (swertspieler+twertspieler+adwertspieler)/3/100;
            syslvl = (float) (Math.round(syslvl*1)/1.0);
        }

        @Override
        public void onClick(View v) {
            int eingabe = v.getId();
            if(eingabe==R.id.b) {
                kdollar += 100;
                Intent intent = new Intent(game.this, game.class);
                startActivity(intent);
            }
            if(eingabe==R.id.save){
                speichern();
                Intent intent = new Intent(game.this, Start.class);
                startActivity(intent);

            }
        }
    }

     
    Dieses Game ist noch am Anfang. Dadurch könnten einige Befehle sinnlos wirken.
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. Robat
    Robat Bekanntes Mitglied
    Hey :)

    Das passt in der Regel nicht zusammen. Setze dich erstmal mit den Basics von Java auseinander und fang' dann an Apps zu programmieren. So wirst du einiges nicht verstehen was dort eigentlich im Hintergrund passiert.

    Zu deinem Problem:

    Ich nehme mal an, dass Zeile 141 folgende ist:
    Code (Java):

    editor.putInt("Data1",preis1);
     
    Du bekommst eine NPE, da du hier das erste mal versuchst auf ein Objekt zuzugreifen, was du nirgends initialisiert hast.
    Generell initialisierst du ein SharedPreferences.Editor so:

    Code (Java):


    SharedPreferences sharedPref  = ...


    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putInt(.., ..);

     
    Das ganze musst du in deinen Code einfügen bevor du das erste mal editor.putInt() o.ä. Methoden aufrufst :)

    Gruß
    Robert
     
  4. Battleju
    Battleju Mitglied
    Danke, ich habe die Initialisierung gemacht. Ich habe es getestet und es funktioniert. Doch wenn ich die App neustarte, sind die Werte nicht mehr gespeichert. Habe ich etwas falsch gemacht oder habe ich die Erklärung zu dem Befehl das falsch verstanden?
     
  5. walex
    walex Neues Mitglied
    In der Methode speichern() fehlt am Ende noch das editor.commit(), oder besser editor.apply()
    walex
     
  6. Battleju
    Battleju Mitglied
    Hier nochmal mein überarbeiteter Source Code:
    Code (Java):
    package ihack.battl.de.ihack;

    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.content.SharedPreferences.Editor;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.view.View.OnClickListener;
    import android.widget.Toast;

    public class Start extends AppCompatActivity implements OnClickListener {
          Button boption1,boption2,hilfe;
          static SharedPreferences speicher;
          static Editor editor;

        static int savewert=0;
        static int test;
        static float bitstart,syslvl,kdollar,dollarmulti,score,bitcoin,przwert,grakawert;
        static float prz,twertgegner,twertspieler,adwertspieler,swertspieler,x,option1z,option2,option2_1,option3,option4,swertgegner1,twertgegner1,adwertgegner1,gdollar1,score1,escore1,swertgegner2,twertgegner2,adwertgegner2,gdollar2,score2,escore2,swertgegner3,twertgegner3,adwertgegner3,gdollar3,score3,escore3;
        static int przmulti,agswwert,prgswwert;
        static int preis1,preis2,preis3,preis4;
        static long psccode,altpsccode;
        static float angpsccode;

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

            boption1= (Button)findViewById(R.id.bNeuesSpiel);
            boption2= (Button)findViewById(R.id.bSpielLaden);
            hilfe = (Button)findViewById(R.id.bHilfe);


            boption1.setOnClickListener(this);
            boption2.setOnClickListener(this);
            hilfe.setOnClickListener(this);

            speicher = getApplicationContext().getSharedPreferences("Wert",0);
            editor = speicher.edit();

        }

        public void onClick(View e){
            int eingabe = e.getId();
            if(eingabe==R.id.bNeuesSpiel){
                test= 1;
                preis1=2;
                preis2=3;
                preis3=1;
                preis4=1;
                przwert= (float) 0.1;
                przmulti=1;
                agswwert=1;
                prgswwert=1;
                grakawert=150;
                dollarmulti=1;
                x=1;
                syslvl=1;
                kdollar=100;
                score=0;
                bitstart=0;
                bitcoin=0;
                psccode=0;
                altpsccode=0;

                Intent intent = new Intent(Start.this, game.class);
                startActivity(intent);
            }
            if(eingabe==R.id.bSpielLaden) {
                if(speicher.getInt("TestData",1)!=0){
                    speicher.getInt("Data1",preis1);
                    speicher.getInt("Data2",preis2);
                    speicher.getInt("Data3",preis3);
                    speicher.getInt("Data4",preis4);
                    speicher.getFloat("Data5",x);
                    speicher.getFloat("Data6",bitstart);
                    speicher.getFloat("Data7",syslvl);
                    speicher.getFloat("Data8",kdollar);
                    speicher.getFloat("Data9",dollarmulti);
                    speicher.getFloat("Data10",score);
                    speicher.getFloat("Data11",bitcoin);
                    speicher.getFloat("Data12",przwert);
                    speicher.getFloat("Data13",grakawert);
                    speicher.getInt("Data14",przmulti);
                    speicher.getInt("Data15",agswwert);
                    speicher.getInt("Data16",prgswwert);
                    speicher.getLong("Data17",psccode);
                    speicher.getLong("Data18",altpsccode);
                    Intent intent = new Intent(Start.this, game.class);
                    startActivity(intent);
                }else{
                    Toast.makeText(this, "Kein Spielstand vorhanden",Toast.LENGTH_LONG).show();
                }

            }

        }
        public static void speichern(){
            editor.putInt("Data1",preis1);
            editor.apply();
            editor.putInt("Data2",preis2);
            editor.apply();
            editor.putInt("Data3",preis3);
            editor.apply();
            editor.putInt("Data4",preis4);
            editor.apply();
            editor.putFloat("Data5",x);
            editor.apply();
            editor.putFloat("Data6",bitstart);
            editor.apply();
            editor.putFloat("Data7",syslvl);
            editor.apply();
            editor.putFloat("Data8",kdollar);
            editor.apply();
            editor.putFloat("Data9",dollarmulti);
            editor.apply();
            editor.putFloat("Data10",score);
            editor.apply();
            editor.putFloat("Data11",bitcoin);
            editor.apply();
            editor.putFloat("Data12",przwert);
            editor.apply();
            editor.putFloat("Data13",grakawert);
            editor.apply();
            editor.putInt("Data14",przmulti);
            editor.apply();
            editor.putInt("Data15",agswwert);
            editor.apply();
            editor.putInt("Data16",prgswwert);
            editor.apply();
            editor.putLong("Data17",psccode);
            editor.apply();
            editor.putLong("Data18",altpsccode);
            editor.apply();
            editor.putInt("TestData",test);
            editor.apply();
        }

    }
     
    Code (Java):
    package ihack.battl.de.ihack;


    import android.app.Activity;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.view.View.OnClickListener;


    import static ihack.battl.de.ihack.Start.adwertspieler;
    import static ihack.battl.de.ihack.Start.agswwert;
    import static ihack.battl.de.ihack.Start.altpsccode;
    import static ihack.battl.de.ihack.Start.bitcoin;
    import static ihack.battl.de.ihack.Start.bitstart;
    import static ihack.battl.de.ihack.Start.dollarmulti;
    import static ihack.battl.de.ihack.Start.grakawert;
    import static ihack.battl.de.ihack.Start.kdollar;
    import static ihack.battl.de.ihack.Start.preis1;
    import static ihack.battl.de.ihack.Start.preis2;
    import static ihack.battl.de.ihack.Start.preis3;
    import static ihack.battl.de.ihack.Start.preis4;
    import static ihack.battl.de.ihack.Start.prgswwert;
    import static ihack.battl.de.ihack.Start.prz;
    import static ihack.battl.de.ihack.Start.przmulti;
    import static ihack.battl.de.ihack.Start.przwert;
    import static ihack.battl.de.ihack.Start.psccode;
    import static ihack.battl.de.ihack.Start.score;
    import static ihack.battl.de.ihack.Start.speichern;
    import static ihack.battl.de.ihack.Start.swertspieler;
    import static ihack.battl.de.ihack.Start.syslvl;
    import static ihack.battl.de.ihack.Start.test;
    import static ihack.battl.de.ihack.Start.twertspieler;
    import static ihack.battl.de.ihack.Start.x;
    import ihack.battl.de.ihack.Start;
    public class game extends AppCompatActivity implements OnClickListener {

        Button b,bs;



        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            var();
            setContentView(R.layout.activity_game_menue);
            TextView textView = (TextView) findViewById(R.id.werte);
            textView.setText("Systemlevel: " + syslvl + "\nScanwert: " + swertspieler + "\nTrojanawert: " + twertspieler + "\nAdwarewert: " + adwertspieler + "\n" + kdollar + "Dollar im Besitz");
            b= (Button)findViewById(R.id.b);
            bs=(Button)findViewById(R.id.save);
            b.setOnClickListener(this);
            bs.setOnClickListener(this);


        }
        public void var(){
            kdollar= (float) (Math.round(100.0 * kdollar) / 100.0);
            if (bitstart==1)
            {
                bitcoin+=grakawert/100000;
            } // end of if bitminer

            prz=przwert*przmulti;
            swertspieler=agswwert+100+(syslvl*(prz/5));
            twertspieler=prgswwert+100+(syslvl*(prz/5));
            adwertspieler=prgswwert+100+(syslvl*(prz/5));
            syslvl= (swertspieler+twertspieler+adwertspieler)/3/100;
            syslvl = (float) (Math.round(syslvl*1)/1.0);
        }

        @Override
        public void onClick(View v) {
            int eingabe = v.getId();
            if(eingabe==R.id.b) {
                kdollar += 100;
                Intent intent = new Intent(game.this, game.class);
                startActivity(intent);
            }
            if(eingabe==R.id.save){
                speichern();
                Intent intent = new Intent(game.this, Start.class);
                startActivity(intent);
                test = 1;

            }
        }
    }



     
    Die App funktioniert, jedoch bleiben die Dateien nach einem Neustart der App nicht erhalten.
     
  7. walex
    walex Neues Mitglied
    Doch, doch, die Daten werden sicherlich gespeichert.
    Aber Du solltest beim einlesen die Daten auch den Variablen zuweisen und nicht das Ergebnis ignorieren.
    Bsp,
    speicher.getInt("Data1",preis1) sollte eher heissen
    preis1 = speicher.getInt("Data1",2)
    Die 2 ist der Default-Wert.
    Walex
     
  8. Battleju
    Battleju Mitglied
    Okay, danke. Ich habe es gemacht und jetzt funktioniert es. :)
     
Die Seite wird geladen...

Dateien Speichern - Ähnliche Themen

Dateien im Jar-Programm speichern
Dateien im Jar-Programm speichern im Forum Allgemeine Java-Themen
Kennt jemand ein Programm , um .DEX Dateien zu öffnen, bearbeiten und wieder speichern?
Kennt jemand ein Programm , um .DEX Dateien zu öffnen, bearbeiten und wieder speichern? im Forum Mobile Geräte
Texte mit Absätzen in Dateien speichern und auslesen
Texte mit Absätzen in Dateien speichern und auslesen im Forum Java Basics - Anfänger-Themen
Speichern von bereits gefüllten Dateien
Speichern von bereits gefüllten Dateien im Forum Mobile Geräte
Mehrere Dateien aus JFileChooser in eine ArrayList speichern
Mehrere Dateien aus JFileChooser in eine ArrayList speichern im Forum Java Basics - Anfänger-Themen
Thema: Dateien Speichern