# Variable überschreiben (Android Studio)



## wer112 (19. Jul 2020)

Ich benötige eure hilfe. Ich bekomme es einfach es nicht hin. Das ist bis jetzt das einzigste was ich bei der App aktuell nicht hinbekomme. Diese Schritte sollen genau erklären, was die App macht... Der Rest der App läuft sehr gut, nur dieser Teil(der wichtigste) will nicht.


 App wird geöffnet
lädt Datum aus SharePreferens
 App vergleicht das Datum aus der Datei mit dem heutigen Datum
sind die Datume gleich, dann setzt START_TIME_IN_MILLIS den Wert auf 7200000
Wenn die App den Wert überschrieben hat, speichert die App das heutige Datum + 1 Tag(nächsten Tag)


```
private static final long START_TIME_IN_MILLIS = 7200000; // 2 Stunden
    private long timeLeftInMilliseconds;
    private long mEndTime;



    private boolean timerRunning;

    private boolean internetcheck;

    private SharedPreferences speichen;
    private SharedPreferences.Editor editor;


   protected void internetbonus(){

       //Heutiger Tag

       Calendar calendar = Calendar.getInstance();
       String Day = DateFormat.getDateInstance().format(calendar.getTime());

       speichen = getApplicationContext().getSharedPreferences("Bonus", MODE_PRIVATE);
       editor = speichen.edit();
       // Öffnet SharPerferns und lesen der Datei
       if (speichen.getString("datum", null) != null){

           if ("datum" == Day){



                START_TIME_IN_MILLIS = 7200000;
               Calendar calendar2 = Calendar.getInstance();
               String Day2 = DateFormat.getDateInstance().format(calendar.getTime());
               calendar2.add( Calendar.DATE, 1 );

               if (Day2 != null){
                   SharedPreferences prefs = getSharedPreferences("Bonus", MODE_PRIVATE);
                   SharedPreferences.Editor editor = prefs.edit();
                   editor.putString("datum", Day2);
                   editor.commit();
               }

           }

       }

       //if Anweisung ist ausgelegte datei gleich Heutiger Tag, dann setzen START_TIME_IN_MILLIS = 7200000.
       //Wenn es gesetzt ist, wird der Heutiger Tag + 1 in die Datei geschrieben.

   }
```


----------



## Panda9296 (28. Jul 2020)

Hi =) mein erster Hilfsbeitrag... also sei gnädig.
Shared Preferences speichert einen String. Du musst also genau sagen, was du prüfen möchtest. Du kannst nicht einfach das Datum vergleichen. So vergleichst du 2 Strings. Sag dem Compoiler was genau du vergleichen möchtest... fange mit dem Jahr an und arbeite dich bis zum Tag. Dann sollte es gehen =). Übrigens, wenn du ein Objekt mit dem Datum speicherst, wäre ein Hawk vll besser als SharedPreferences. Hoffe ich konnte dich damit auf die Lösung bringen. Würde mich freuen, wenn du uns auf den laufenden hälst.

Gruß Panda


----------



## mihe7 (28. Jul 2020)

Panda9296 hat gesagt.:


> Hi =) mein erster Hilfsbeitrag... also sei gnädig.


Schön, dass Du helfen willst, allerdings ist sein Code noch konfuser 

@wer112 in dem Code sehe ich einige Probleme:
1. Benennungskonventionen nicht eingehalten: Variablennamen schreibt man in lowerCamelCase.
2. String-Vergleich via Referenzen-Vergleich: das funktioniert nur in Ausnahmefällen. Strings sind Objekte und als solche per equals auf Gleichheit zu prüfen
3. Warum willst Du ein Datum mit dem String "datum" vergleichen?!?
4. Day2 wird niemals null, sondern gleich Day sein.
5. speichen ist wohl ein Tippfehler und "speichern" ist kein guter Variablenname
6. prefs ist das selbe (nicht nur das gleiche) wie speichen, analog gilt das für editor.
7. START_TIME_IN_MILLIS ist eine Konstante - der kann man keinen Wert zuweisen.
8. Du braucht kein zwei Calendar
9. Time API wäre besser (die ließe sich wohl unter Android 4 auch mit API Levels < 26 verwenden)

Ich denke mal, Du willst etwas wie

```
protected void internetbonus(){
        Calendar calendar = Calendar.getInstance();
        String today = DateFormat.getDateInstance().format(calendar.getTime());

        prefs = getApplicationContext().getSharedPreferences("Bonus", MODE_PRIVATE);
        String storedDate = prefs.getString("datum", ""); // Standardwert spart uns den null-check
        if (storedDate.equals(today)) {
            calendar.add( Calendar.DATE, 1 );     
            String tomorrow = DateFormat.getDateInstance().format(calendar.getTime());
            SharedPreferences.Editor editor = prefs.edit();
            editor.putString("datum", tomorrow);
            editor.commit();
        }
        //if Anweisung ist ausgelegte datei gleich Heutiger Tag, dann setzen START_TIME_IN_MILLIS = 7200000.
        //Wenn es gesetzt ist, wird der Heutiger Tag + 1 in die Datei geschrieben.
    }
```
Die Sache mit der Startzeit musst Du Dir allerdings noch überlegen, evtl. soll ja timeLeftInMilliseconds gesetzt werden?


----------

