ArrayAdapter.clear()调用null对象引用

时间:2015-03-06 19:06:45

标签: android arraylist android-asynctask android-arrayadapter

我在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)

0 个答案:

没有答案