Testen eines Java-Long-Wert in einer if-Anweisung. Gilt 0 != 0
Für das Leben von mir ich kann nicht herausfinden, warum ich nicht bekommen kann diese Methode geben Sie die if-Anweisung.
protected void foo() {
Date d = new Date();
long now = d.getTime();
long start;
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
start = settings.getLong(FIRST_USE_DATE, 0);
Log.w(this.getClass().getName(), Long.toString(start));
if (start == 0) {
SharedPreferences.Editor editor = settings.edit();
editor.putLong(FIRST_USE_DATE, now);
}
return true;
}
Beachten Sie, dass die log-und debug-Modus zeigt sich, dass "start = 0"
Ich habe auch versucht
if (start == 0l) {
if (start == 0L) {
Was zum Teufel übersehe ich hier? Gilt 0 != 0?
Entwickle ich in Eclipse mit Java für Android. Danke.
Bearbeitet:
@methodin - Nein sorry, das funktioniert nicht.
@Aioobe - ich habe einen Haltepunkt unter der IF-Anweisung, die nie gestellt wird.
Edit2: Hier ist der eigentliche code bei mir läuft, seit du gefragt hast.
protected boolean isDemoExpired() {
Date d = new Date();
long now = d.getTime();
long demoStart;
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
demoStart = settings.getLong(FIRST_USE_DATE, 0);
if (demoStart == 0) {
SharedPreferences.Editor editor = settings.edit();
editor.putLong(FIRST_USE_DATE, now);
System.out.println(Long.toString(demoStart));
return false;
}
return true;
}
- Was ist, wenn((long)start == 0)
- Haben Sie einen debug-Ausgabe innerhalb der if-Zweig? Sind Sie sicher, dass Sie nicht in Sie gehen?
- Bearbeitete original-post für Ihre Kommentare.
- Ich denke, aioobe Mittel setzen Sie ein
System.out.println("Yep, definietly in the if statement");
in Ihrem if-Anweisung. Ich habe gesehen, Haltepunkte nicht vor. - Ich habe es und meine eigentliche code.
- Könnte
settings.getLong(FIRST_USE_DATE, 0);
werden eine Ausnahme werfen? - Sie versuchen, stellen Sie sicher, dass Sie in die
if
, doch Sie legte Ihreprintln
in der Nähe des Ende. Dies ist ein Fehler, denn es ist möglich, dass Sie werfen können, bevor dieser Punkt. Legen Sie ein Druck-unmittelbar vor derif
, und man sofort nach der öffnenden Klammer. - Und da dieser aussieht wie GUI-code, bewusst sein, dass nicht abgefangene Ausnahmen im wesentlichen verschwinden -- die Methode nicht komplett, aber Sie können nie wissen, die die Ausnahme (in der Sun-JVM, Sie werden in die Konsole geschrieben wird, aber bei Android wahrscheinlich nicht).
- Was passiert, wenn Sie Schritt für Schritt durch die Methode? also Pause vor dem 'wenn'. Ich, euer breakpoint auf das 'return false' Zeile wird nie ausgelöst. Ich habe dieses bit-code in eine Android-app und soweit ich sehen kann, das system.outs nicht überall, auch wenn die 'if' - block eingegeben wird
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke dein problem ist genau das Gegenteil.
Ich habe gerade debuggt den code und es funktioniert, das problem ist, dass die if-Anweisung, es ist immer wahr, denn es gibt keinen editor.commit() nach dem ändern der FIRST_USE_DATE variable.
Edit: ich habe gerade versucht das Debuggen von code und das gleiche passierte: die if-Anweisung, es ist immer wahr und wird es alle Zeit, weil es keinen editor.commit() um die änderungen zu speichern, um die FIRST_USE_DATE variable.
Nicht warum Sie Lange beginnen, anstatt lange und überprüfung auf null-Wert?
scheint es, dass die auto-unboxing hier geschieht und Sie bekommen den Wert null. Eine andere Frage ist, warum 0 == 0 überprüfen nicht überstehen.
Sie machen irgendwo einen Fehler...
Sind Sie sicher, dass Sie nicht in die if-Anweisung UND start = 0 ?
Sind Sie und zeigen Sie uns den code, den Sie ausführen ?
Könnten Sie ausführen folgenden code (entspricht code)
Und Sie sehen würden, geben Sie die if-Anweisung...
Sind Sie vertraut mit den Konzepten zu verstecken und shadowing? Haben Sie noch andere Variablen mit dem selben Namen in dieser Klasse oder einer Ihrer Eltern?
Ich glaube nicht, dass es etwas falsch mit Ihrem code - versuchen Sie nach dem Neustart des Computers (eine Microsoft-Betriebssystem richtig? 🙂
Wenn das nicht funktioniert, löschen Sie den fehlerhaften code (am Ende mit einer leeren Methode) kompilieren und zu testen, um sicherzustellen, gibt es keine Fehler. Dann hardcode einen akzeptablen Wert und Teste nochmal. Schließlich geben Sie Ihr code - nicht fügen Sie eine Kopie.
Einmal, vor langer Zeit, ich hatte etwas ähnliches, und es ging nicht Weg, bis ich erneut den code eingegeben - meine beste Vermutung ist, einige versteckte Charakter war, die Probleme verursacht, aber ich habe es nie wieder gesehen (ich bin auch nicht sicher, was zur Hölle passiert ist, dass die Zeit entweder).