如何在Android中使用assert?


77

我想assert obj != null : "object cannot be null"在Android设备上使用。该断言似乎不起作用,因此我在网上搜索后发现了这种本地解决方案:

亚行外壳setprop debug.assert 1

它确实可以在我的本地计算机上运行。

我想使用我的Eclipse项目运行此命令(因此它将在源代码控件中)。我该怎么做?



定义“无效”。您是说它没有明显的作用吗?还是有效果但与您期望的效果不同?
LarsH '18

Answers:


88

断言无法在Android中运行,因为大多数情况下,一个人不是在调试模式下运行,而是运行一些优化的代码。因此,正确的解决方案是使用如下代码手动引发异常:

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

应该注意的是,根据设计,断言仅用于调试代码,而不用于发布时间代码。因此,这可能不是抛出Assert的最佳用途。但这就是您仍然可以做到的方式,所以...



3
有人告诉我,如果(obj == null),则应读取此代码
Lo-Tan

1
警告复制粘贴内容:应显示为“投掷”,而不是“投掷”
chrisben

2
我会抛出AssertionError而不是Exception。
Ellen Spertus

4
您的答案是错误的,这不是主张的目的。断言会自动从发布代码中删除,而您的情况不会出现。您可以将类似的if条件与BuildConfig.DEBUG标志结合使用,如下所示:if(BuildConfig.DEBUG && obj == null)throw ... BuildConfig.DEBUG是编译时间常数,因此编译器可以在完全发布代码。但是,永远不会为lib项目设置BuildConfig.DEBUG,因此这又使整个事情变得毫无用处。
b005t3r

13

在Android 4.x设备上进行了测试,可以在Android设备上使用Java断言:

  • 编辑/system/build.prop(例如,通过X-plore),在文件末尾添加一行:debug.assert = 1
  • 重新启动手机

现在,您的Android设备可以断言检查了,断言检查失败时将抛出AssertionError。

编辑:

另一种简单的方法是从PC启用断言,直到设备重新启动:

platform-tools\adb shell setprop debug.assert 1

例如,您可以创建一个.bat文件(在Windows上)并在连接设备时运行它。


1
我设置了“ platform-tools \ adb shell setprop debug.assert 1”,但是idk为什么,到达断言行时它不会引发任何异常。我们需要使用调试模式吗?
HendraWD

1
尝试使用调试模式,但仍然相同。我的Android版本是5.1.1,它已经扎根,如果可能会出现问题,请输入idk
HendraWD

@HendraWD:在非root用户的Nexus 5中也不起作用。
丹尼尔(Daniel)

10

创建自己的assert方法:

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

为了简洁起见,返回相同的对象可以在分配中使用此对象。


那就是我要回答的问题:)
Geekarist

5

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

将RuntimeException()替换为适当的异常子类型。


5

共享我在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

要在Java虚拟机可用的断言,使用- enableassertions或- EA命令行选项

  • 在Window的命令提示符下,

    java –ea YourApp

  • 在Android 3.0工作室,在工具/编辑配置/ VM选项,输入- enableassertions或- EA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.