Comment obtenir la valeur Booléenne de l'Objet
J'ai essayé différentes manières de résoudre ce problème, mais je ne suis pas en mesure de le réparer. J'essaie d'obtenir la valeur Booléenne d'une Objet passée à l'intérieur de cette méthode à une case à cocher:
public boolean onPreferenceChange(Preference preference, Object newValue)
{
final String key = preference.getKey();
referenceKey=key;
Boolean changedValue=!(((Boolean)newValue).booleanValue()); //ClassCastException occurs here
}
J'obtiens:
java.lang.ClassCastException: java.lang.La chaîne ne peut pas être lancé à java.lang.Boolean
- Vous êtes d'abord en supposant newValue est de type Booléen. Vous pouvez utiliser instanceof pour vérifier le type de newValue. Si il est une valeur booléenne, autounboxing, vous n'aurez aucun problème. Si c'est une chaîne, vous pouvez comparer (ignorant la casse) pour les valeurs "true", "false", puis créer les booléens représentation.
Vous devez vous connecter pour publier un commentaire.
Au lieu de moulage, vous pouvez faire quelque chose comme
Voici une partie du code source de la classe Boolean en java.
Donc, comme vous pouvez le voir, vous avez besoin de passer une chaîne de caractères avec la valeur "true" pour que la valeur booléenne vrai. Sinon, c'est faux.
À partir du code que vous avez posté, et le résultat que vous voyez, il ne ressemble pas à newValue est un booléen. Si vous essayez de lancer à un Booléen, mais ce n'est pas un, de sorte que l'erreur se produit.
Il n'est pas clair ce que vous essayez de faire. Idéalement vous ferais newValue un booléen. Si vous ne pouvez pas le faire, cela devrait fonctionner:
Noter que cette solution n'est pas vraiment idéal, et est un peu fragile. Dans certains cas, c'est OK, mais il est probablement mieux de ré-évaluer les entrées de votre méthode pour les rendre un peu plus propre. Si vous ne pouvez pas, alors le code ci-dessus va travailler. C'est vraiment quelque chose que vous seul pouvez décider dans le cadre de votre solution.
Si vous savez que votre
Preference
est unCheckBoxPreference
, alors vous pouvez appeler isChecked(). Elle renvoie uneboolean
, pas unBoolean
, mais c'est probablement assez proche.Voici du code de la APIDemos Administration De L'Appareil de l'échantillon (DeviceAdminSample.java).