web-dev-qa-db-fra.com

Comment utiliser Assert dans Android?

Je veux utiliser assert obj != null : "object cannot be null" sur Android. L'assertion ne semble pas fonctionner, j'ai donc cherché en ligne et j'ai trouvé cette solution locale:

adb Shell setprop debug.assert 1

cela fonctionne sur ma machine locale.

Je veux exécuter cette commande en utilisant mon projet Eclipse (donc ce serait dans le contrôle de source). Comment puis-je le faire?

Merci!

70
Adibe7

Assert ne fonctionnera pas en Android car la plupart du temps une personne ne s'exécute pas en mode débogage, mais plutôt du code optimisé. Ainsi, la bonne solution est de lever manuellement une exception, avec code comme celui-ci:

if (obj==null) throw new AssertionError("Object cannot be null");

Il convient de noter que par conception, les assertions sont destinées au code de débogage et non au code temporel de publication. Donc, ce n'est peut-être pas la meilleure façon de lancer un Assert. Mais c'est comme ça que vous pouvez encore le faire, alors ...

77
PearsonArtPhoto

Testé sur Android 4.x, il est possible d'utiliser Java assert sur Android:

  • Modifiez /system/build.prop (par exemple par X-plore ), ajoutez une ligne à la fin du fichier: debug.assert = 1
  • Redémarrez le téléphone

Maintenant, votre appareil Android est sensé pour affirmer les vérifications et lancera AssertionError lorsque la vérification des assertions échoue.

MODIFIER:

Une autre approche simple, permettant les assertions à partir du PC jusqu'au redémarrage de l'appareil:

platform-tools\adb Shell setprop debug.assert 1

Vous pouvez par exemple créer un fichier .bat (sous Windows) et l'exécuter lorsque l'appareil est connecté.

13
Pointer Null

Créez votre propre méthode d'assertion:

public static <T> T assertNotNull(T object) {
    if (object == null)
        throw new AssertionError("Object cannot be null");
    return object;
}

Le retour du même objet permet de l'utiliser dans des affectations pour plus de brièveté.

9
Paweł Nadolski

if (somevar == null) throw new RuntimeException();

Remplacez RuntimeException () par un sous-type d'exception approprié.

6
mah

Partager ma classe que j'utilise pour les assertions sur Android, c'est plus simple, a un joli nom et très élégant car il vous permet d'écrire des assertions comme ceci:

Assert.that(obj!=null, "Object should not be null");

Voici le code de la classe:

public class Assert {
    public static void that(boolean condition, String message) {
        if (!condition) {
            throw new AssertionError(message);
        }
    }
}

J'espère que ça aide!

2
Bitonator

Pour rendre l'assertion disponible dans Java Virtual Machine, en utilisant - enableassertions or --- ea options de ligne de commande

  • sur l'invite de commande de Windows,

    Java –ea YourApp

  • sur Android Studio 3.0, sur Outils/Modifier les configurations/options VM, saisir - activer les affirmations ou - ea
1
Shuyan Ji