Как использовать Assert в Android? - PullRequest
70 голосов
/ 30 мая 2011

Я хочу использовать assert obj != null : "object cannot be null" на устройстве Android. Assert, кажется, не работает, поэтому я искал в Интернете и нашел это локальное решение:

adb shell setprop debug.assert 1

это работает на моей локальной машине.

Я хочу выполнить эту команду, используя мой проект eclipse (так, чтобы он был в системе контроля версий). Как я могу это сделать?

Спасибо!

Ответы [ 6 ]

77 голосов
/ 30 мая 2011

Assert не будет работать в Android, потому что большую часть времени человек не работает в режиме отладки, а скорее оптимизирует код.Таким образом, правильное решение состоит в том, чтобы вручную генерировать исключение, с кодом, подобным следующему:

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

Следует отметить, что по замыслу Asserts предназначены для кода отладки, а не для кода времени выпуска.Так что это может быть не лучшим вариантом броска Ассерта.Но это то, как ты можешь это сделать, так что ...

13 голосов
/ 19 апреля 2012

Протестировано на устройстве Android 4.x, возможно использование Java assert на устройстве Android:

  • Редактировать /system/build.prop (например, X-plore ), добавить строку в конце файла: debug.assert = 1
  • Перезагрузка телефона

Теперь ваше Android-устройство чувствительно к проверкам подтверждения и выдает AssertionError, если проверка подтверждения не удалась.

EDIT:

Еще один простой подход - включение подтверждений с ПК до перезагрузки устройства:

platform-tools\adb shell setprop debug.assert 1

Например, вы можете создать файл .bat (в Windows) и запускать его, когда устройство подключено.

9 голосов
/ 13 мая 2016

Создайте свой собственный метод подтверждения:

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

Возвращение того же объекта позволяет использовать его в кратких заданиях.

6 голосов
/ 30 мая 2011

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

Замените RuntimeException () на соответствующий подтип исключения.

2 голосов
/ 13 ноября 2017

Общий доступ к моему классу, который я использую для утверждений на Android, более прост, имеет приятные названия и очень элегантен, поскольку позволяет писать утверждения следующим образом:

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

Вот код для класса:

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

Надеюсь, это поможет!

1 голос
/ 01 мая 2018

Чтобы сделать утверждение доступным в виртуальной машине Java, используйте - enableassertions или - ea параметры командной строки

  • в командной строке Windows,

    java –ea YourApp

  • в Android Studio 3.0, в Инструменты / Редактирование конфигураций / Параметры виртуальной машины , ввод - включить подтверждения или - ea
...