我正在做一些线程。在postExecute中我需要执行迭代器任务。我检查iterator()是否为null,但它仍然产生这个错误:
java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at co.appname.app.Fragments.F_EditPhoto$FiltersAsyncTask.onPostExecute(F_EditPhoto.java:772)
这是我的代码,我正在检查我认为的每个可能的空方案。你能告诉我做错了吗?
@Override
protected void onPostExecute(Void aVoid)
{
List<K_FilterPreview> filtersCache = _positionToFiltersCacheMap.get(_selectedEditImage.position);
if (filtersCache == null || filtersCache.iterator() == null)
{
System.err.println("Filter cache was null");
}
// THIS IS THE LINE THROWING THE ERROR!
Iterator<K_FilterPreview> i = filtersCache.iterator();
while (i.hasNext())
{
//Do stuff
}
}
只有当我尝试在当前事件处理完成后立即启动此事件时,才会发生这种情况。如果我在调用它之前等待几秒钟它可以正常工作。因此,线程会发生一些事情,但我不确定是什么。
答案 0 :(得分:3)
if (filtersCache == null || filtersCache.iterator() == null)
{
System.err.println("Filter cache was null");
}
如果filtersCache
为空,则只打印一个错误语句,然后程序继续在空iterator
上调用filtersCache
。在这种情况下,您可能只想从方法返回。此外,通常当您在列表中获得Iterator
时,它不会返回null,因此我不认为在该条件中需要第二部分:
if (filtersCache == null)
{
System.err.println("Filter cache was null");
return;
}
答案 1 :(得分:1)
检查以确保filtersCache
不是null
,然后致电.iterator()
protected void onPostExecute(Void aVoid)
{
List<K_FilterPreview> filtersCache = _positionToFiltersCacheMap.get(_selectedEditImage.position);
if (filtersCache == null || filtersCache.iterator() == null)
{
System.err.println("Filter cache was null");
}
// THIS IS THE LINE THROWING THE ERROR!
if(filtersCache != null && filtersCache.iterator() != null){
Iterator<K_FilterPreview> i = filtersCache.iterator();
while (i.hasNext())
{
//Do stuff
}
}
}