我正在创建一个从Web检索图像的应用程序.如果无法检索图像,则应使用另一个本地图像.
在尝试执行以下行时:
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (drawable.equals(null)) {
drawable = getRandomDrawable();
}
Run Code Online (Sandbox Code Playgroud)
如果drawable为null,则行if(drawable.equals(null))抛出异常.
有没有人知道如何检查drawable的值,以便在它为null并且检索本地图像时抛出异常(执行drawable = getRandomDrawable())?
Tho*_*mas 162
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (drawable == null) {
drawable = getRandomDrawable();
}
Run Code Online (Sandbox Code Playgroud)
该equals()方法检查值相等性,这意味着它比较两个对象的内容.由于null不是对象,因此在尝试将对象的内容与内容进行比较时会崩溃null.
该==运营商检查参考平等,这意味着它看起来两个对象是否实际上是相同的对象.这不要求对象实际存在; 两个不存在的对象(null引用)也是相等的.
dea*_*mon 34
编辑Java 8解决方案:
final Drawable drawable =
Optional.ofNullable(Common.getDrawableFromUrl(this, product.getMapPath()))
.orElseGet(() -> getRandomDrawable());
Run Code Online (Sandbox Code Playgroud)
你可以drawable final在这种情况下申报.
正如Chasmo指出的那样,Android目前不支持Java 8.所以这个解决方案只能在其他环境中使用.
out*_*fee 19
我用这种方法:
if (null == drawable) {
//do stuff
} else {
//other things
}
Run Code Online (Sandbox Code Playgroud)
这样我发现提高了行的可读性 - 当我通过源文件快速读取时,我可以看到它是一个空检查.
关于为什么你不能打电话给.equals()可能的对象null; 如果您拥有的对象引用(即'drawable')实际上是null它,则它不指向堆上的对象.这意味着堆上没有对象equals()可以成功调用.
祝你好运!
DIY
private boolean isNull(Object obj) {
return obj == null;
}
Run Code Online (Sandbox Code Playgroud)
Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (isNull(drawable)) {
drawable = getRandomDrawable();
}
Run Code Online (Sandbox Code Playgroud)
drawable.equals(null)
Run Code Online (Sandbox Code Playgroud)
上一行在可绘制对象上调用“ equals(...)”方法。
因此,当drawable不为null且它是一个真实对象时,一切顺利,因为调用“ equals(null)”方法将返回“ false”
但是,当“ drawable”为null时,则意味着在空对象上调用“ equals(...)”方法,这意味着在不存在的对象上调用方法,从而抛出“ NullPointerException”
要检查对象是否存在并且不为空,请使用以下命令
if(drawable == null) {
...
...
}
Run Code Online (Sandbox Code Playgroud)
在上述条件下,我们正在检查引用变量“ drawable”是否为null或包含某个值(对其对象的引用),以便在drawable为null的情况下不会引发异常。
null == null
Run Code Online (Sandbox Code Playgroud)
已验证。
| 归档时间: |
|
| 查看次数: |
324476 次 |
| 最近记录: |