Wie man Boolean-Wert aus Objekt
Ich versucht, verschiedene Möglichkeiten, um dieses Problem zu lösen, aber ich bin nicht in der Lage, es zu beheben. Ich werde versuchen, den booleschen Wert einer Objekt bestanden innerhalb dieser Methode eine checkBox:
public boolean onPreferenceChange(Preference preference, Object newValue)
{
final String key = preference.getKey();
referenceKey=key;
Boolean changedValue=!(((Boolean)newValue).booleanValue()); //ClassCastException occurs here
}
Bekomme ich:
java.lang.Classcastexception-Fehler: java.lang.String nicht umgewandelt werden, um java.lang.Boolean
Sie werden zuerst angenommen, newValue ist der Typ Boolean. Sie können instanceof zu prüfen, die Art von newValue. Wenn es ein boolean, mit autounboxing, haben Sie kein problem. Wenn es ein string ist, können Sie vergleichen (ignoring case) für die Werte "true", "false", dann erstellen Sie die entsprechenden booleschen Darstellung.
InformationsquelleAutor David Prun | 2012-05-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statt casting Ihr können Sie etwas tun, wie
Dies dauert nur strings keine Objekte
Und er ist ziemlich viel, nur die Arbeit mit strings, es scheint daher, meine Lösung.
InformationsquelleAutor OmniOwl
Hier einige der source-code für die Boolean-Klasse in java.
So wie Sie sehen können, Sie müssen übergeben Sie einen string mit dem Wert "true", um für den booleschen Wert wahr zu sein. Ansonsten ist es false.
InformationsquelleAutor Larry Battle
Aus dem code, den Sie geschrieben, und das Ergebnis, das Sie sehen, es sieht nicht wie newValue ist ein boolescher Wert. So versuchen Sie zu werfen, um einen booleschen Wert, aber es ist nicht eine, so tritt der Fehler auf.
Es ist nicht klar, was Sie zu tun versuchen. Idealerweise würde ein boolean newValue. Wenn Sie das nicht kann, sollte diese Arbeit:
Beachten Sie, dass diese Lösung nicht wirklich ideal, und ist etwas brüchig. In einigen Fällen, das ist OK, aber es ist wahrscheinlich besser, zu re-evaluieren Sie die Eingänge Ihrer Methode, um Sie ein bisschen sauberer. Wenn Sie nicht können, dann wird der obige code funktioniert. Es ist wirklich etwas, was nur Sie können entscheiden, die im Kontext der Lösung.
InformationsquelleAutor Alan Delimon
Wenn Sie wissen, dass Ihre
Preference
ist einCheckBoxPreference
, dann können Sie anrufen isChecked(). Es gibt eineboolean
, nicht einBoolean
, aber das ist wohl nahe genug.Hier ist ein code aus der APIDemos Geräte-Verwaltung Probe (DeviceAdminSample.java).
InformationsquelleAutor Sparky