Java String läßt sich nicht vergleichen (ist evtl kein String)

Mit Android Studio kannst du nicht debuggen?
Es ist schon eine Weile her, aber soweit ich mich erinnern kann, wird ein virtuelles Smartphone auf dem PC gestartet und dort läuft die selbst geschriebene App. Und da geht auch debuggen.

Gib mal den jeweiligen Hashcode aus mit hashCode():
setText("a"+farbname+"a" + farbname.hashCode() + "a")
setText("a"+vergleich+"a" + vergleich.hashCode() + "a")

Grundsätzlich gibt es noch das Encoding, was hier Probleme bereiten könnte.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Knito
Die Hashes sind nicht gleich!
Das Android kann ich simulieren, aber leider nicht das datengebende Bluetoothgerät.
Ich glaube es wird bytecode geliefert und mit meinem String (utf 16?) verglichen.

Die heisse Spur!

Vielen Dank an alle, insbesondere @wahli . Jetzt weiß ich wo der Fehler liegt und kann dort weitermachen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: wahli und Bob1337
Simon#G schrieb:
Mit Java 7 hat Oracle den String Pooling Algorithmus verändert. Zum Bessern zwar, aber dennoch: Es gibt was das angeht keine Garantien.

PS: OpenJDK macht in der equals Funktion direkt zu allererst den Pointervergleich. Durch die Pooling-Trickserei hast du also nix gewonnen außer potenzielle Probleme.
Hier wurde nicht geändert, sondern optimiert. Das ist ein Unterschied! Der Stringpool hat nach Java 7 genauso funktioniert wie vorher.

greetz
hroessler
 
Knito schrieb:
Das Android kann ich simulieren, aber leider nicht das datengebende Bluetoothgerät.
Aktiviere auf deinem Smartphone den Entwicklermodus. Dann kannst du es mit deinem PC verbinden und es sollte in Android Studio auch in der Geräteliste auftauchen, wenn du das Debuggen startest. Dann steht dir der ganze Debugger inkl. Bluetooth zur Verfügung.
 
  • Gefällt mir
Reaktionen: Knito
Kopiere die Rückgabewerte von beiden Methoden mal z. B. in Notepad++ und wechsel in den Hex Modus..
 
  • Gefällt mir
Reaktionen: Knito
Darlis schrieb:
heulendoch schrieb:

Danke! jetzt kann ich das log direkt im Studio sehen. Ich hab die Vergleichswerte mit log.d ausgegeben

07-04 11:03:53.578 21902-21902/com.datacolor.CaranPublicSDKDemo D/test����������������:
07-04 11:03:53.598 21902-21902/com.datacolor.CaranPublicSDKDemo D/test:

Dann hab ich den Hex-Editor im Notepad++ installiert, leider zeigt der auch nur unbekannte Zeichen an.

796637


Das obere "test" ist vom Bluetooth, das untere "test" ist mein Vergleichsstring.
Das Bluetoothgerät hängt irgendwas an die eigentliche Variable an.
 
Wird bei der Kodierung ein Zeichen gefunden, welches nicht im Unicode abgebildet werden kann, so erhält dieses Zeichen den Wert EF BF BD (Replacement Character).
Schau einfach, dass du diese Zeichen entfernst.
 
  • Gefällt mir
Reaktionen: Knito
farbname = farbname.replaceAll("\\p{C}", "");

ES KLAPPT!! Tausend Dank!
 
Du hast die Lösung eh schon gefunden. Ich wollte sie dir gerade posten :)
 
  • Gefällt mir
Reaktionen: Knito
Zurück
Oben