我正在收到
的崩溃报告 android.widget.ListView lv; lv.removeFooterView(v)
错误是空指针异常。我检查listView本身不是null。是什么导致这个?是否有必要确保要删除的视图不为空?这还不够,还是我首先需要检查页脚视图是否已添加?
java.lang.NullPointerException
at android.widget.ListView.removeFooterView(ListView.java:374)
在我看来,这种方法应该足够强大,不会崩溃!如果不能删除视图,为什么不返回false?
PS。我想知道是否有其他人见过这个?
答案 0 :(得分:14)
很遗憾,您没有提及错误报告来自哪个Android版本。但是,看看源代码,Android 2.1-update1似乎是个不错的选择。
我只需复制整个方法即可明确:
public boolean removeFooterView(View v) {
if (mFooterViewInfos.size() > 0) {
boolean result = false;
if (((HeaderViewListAdapter) mAdapter).removeFooter(v)) { // <- line 274
mDataSetObserver.onChanged();
result = true;
}
removeFixedViewInfo(v, mFooterViewInfos);
return result;
}
return false;
}
现在将上述removeFooterView(...)
方法与更新平台的实施进行比较:
public boolean removeFooterView(View v) {
if (mFooterViewInfos.size() > 0) {
boolean result = false;
if (mAdapter != null && ((HeaderViewListAdapter) mAdapter).removeFooter(v)) {
if (mDataSetObserver != null) {
mDataSetObserver.onChanged();
}
result = true;
}
removeFixedViewInfo(v, mFooterViewInfos);
return result;
}
return false;
}
正如您所看到的,已经为某些不是null
的成员添加了一些额外的检查。这表明如果mAdapter == null
,第一个方法确实会在第274行失败,而这不会导致新实现崩溃。
要解决此问题,您可能需要做的就是在尝试删除页脚视图之前添加lv.getAdapter() != null
之类的内容。
答案 1 :(得分:0)
如果您查看文档,您会注意到实际情况如此:
http://developer.android.com/reference/android/widget/ListView.html)
返回
如果视图已删除,则为true;如果视图不是页脚视图,则为false
因此,您应该为视图和listView添加空检查,或者如果这是一个异常状态(很少发生,然后将其包装在异常块中)。