参数判空
在Android开发过程中,我们肯定会需要接收服务端传过来的参数,以及别的页面和其他情况下传过来的参数,开发需求需要对其进行判空操作,有时候你会发现,你判空操作没效果,这是为什么呢?首先来看下面的判空操作:
if (bean.getImageList() == null) {
rvImageShow.setVisibility(View.GONE);
goneView2.setVisibility(View.GONE);
} else {
rvImageShow.setVisibility(View.VISIBLE);
iamgeAdapter.setImageList(bean.getImageList());
}
上面这段代码就是从服务端获取一个参数然后进行判空,如果判空就隐藏某个视图,如果不为空就显示那个视图,你是不是觉得上面的写法木有问题???
如果是,那恭喜你,你太菜了·!!!
上面的判空存在一个问题,那就是你虽然判断了获取的list是否为空,但是如果list中的参数就是空参,没有值的,那么list此时就不是空list了,那么代码执行的时候就会直接显示else中语句,所以上面的写法是不正确的,正确的写法如下:
if (bean.getImageList() == null || bean.getImageList().size() == 0) {
rvImageShow.setVisibility(View.GONE);
goneView2.setVisibility(View.GONE);
} else {
rvImageShow.setVisibility(View.VISIBLE);
iamgeAdapter.setImageList(bean.getImageList());
}
第二种判空情况
直接上代码,你肯定懂这个逻辑,但是下面代码有问题,你知道是为什么吗?
if (bean.getBarCode()!=null) {
tvGoodsCode.setText("条码:" + bean.getBarCode());
} else {
tvGoodsCode.setVisibility(View.GONE);
}
其实这个问题和上面问题一样的,正确的写法如下:
if (!TextUtils.isEmpty(bean.getBarCode())) {
tvGoodsCode.setText("条码:" + bean.getBarCode());
} else {
tvGoodsCode.setVisibility(View.GONE);
}
你可以打开TextUtils.isEmpty()这个方法,这个方法中会告诉why之前那个是错误的
public static boolean isEmpty(@Nullable CharSequence str) {
return str == null || str.length() == 0;
}
看到这里,我相信你应该已经懂了。
总结
在开发过程中,需要对参数判空时,不能直接写(xx==null)这样的写法是错误,你需要考虑到参数可能就是个空参数,所以在判空的时候不能只写null还需要进一步判断。