我在AsyncTask中有以下代码,用于从数据库中检索通知列表。
protected void onPostExecute(List<NotificationItem> result) {
super.onPostExecute(result);
if (dialog.isShowing())
dialog.dismiss();
if (adpt != null) {
if (result != null && result.size() > 0)
adpt.setItemList(result);
else if (adpt.getItemList() != null)
adpt.clear();
adpt.notifyDataSetChanged();
}
srl.setRefreshing(false);
}
如您所见,在进行相关操作(如.clear())之前,我会检查结果,适配器(adpt)及其项目(adpt.getItemList())是否为null。我希望在结果大小为0时清除列表,这意味着不应该向用户显示任何内容(之前,它确实)。当调试在.clear()行上时,所有三个对象都不为null,但我仍然得到NullPointerException。
在clear()内部调试时,我进入了ArrayAdapter.java:
public void clear() {
synchronized (mLock) {
if (mOriginalValues != null) {
mOriginalValues.clear();
} else {
mObjects.clear();
}
}
if (mNotifyOnChange) notifyDataSetChanged();
}
mOriginalValues和mObjects都为null,因此出错。不确定我做错了什么,你能看到问题吗?
更新:我实例化了这样的适配器:notificationsAdapter = new NotificationsAdapter(null);
当然,当我还没有任何项目时,我这样做是第一步。
错误是:
java.lang.NullPointerException:尝试调用接口方法 'void java.util.List.clear()'在空对象引用上 android.widget.ArrayAdapter.clear(ArrayAdapter.java:258)at com.example.example.fragments.NotificationsList $ NotificationsRetriever.onPostExecute(NotificationsList.java:184)