添加Hashmap的ArrayList给出NPE


    subMap = new HashMap<String, String>();
    cursor = sdB.query(DataBase.TB, cols, null, null, null, null, null);
    cursor.moveToFirst();
    limit = 1;
    while(cursor.moveToNext()){
        limit +=1;
    }
    limit *= 2;
    cursor.moveToFirst();
    do{
        for(i=i+1; i<limit; i++){
            if(i%2!=0){
                subCode = cursor.getString(cursor.getColumnIndex(DataBase.C_CODE));
                subMap.put(TAG_SUB_CODE, subCode);
                Log.i("Alert", subCode);
                subjects.add(subMap);
                break;
            }
            else{
                subName = cursor.getString(cursor.getColumnIndex(DataBase.SUB_TITLE));
                subMap.put(TAG_SUB_NAME, subName);
                if(subMap.containsKey(TAG_SUB_NAME))
                    Log.i("Alert", "Yes");
                if(subMap.containsValue(subName))
                    Log.i("Alert", "Again Yes");
                Log.i("Alert", TAG_SUB_NAME);
                Log.i("Alert", subName);
                subjects.add(subMap);
            }
        }
    }while(cursor.moveToNext());
    cursor.close();

给出了if和else语句中subjects.add(subMap)的NPE。首先执行else,然后执行if。但是程序在第一次遇到else块时就停止了。有人能帮帮我吗?我检查了hashmap中值和键的存在,它在我的日志猫中返回了我的true (yesagain yes),但仍然subjects.add(subMap)返回NPE。

Thank You

您需要初始化列表subjects。例如:

ArrayList<HashMap<String, String>> subjects = new ArrayList<HashMap<String, String>>();

如果你不这样做,那么在这一行:

subjects.add(subMap);

将抛出NPE

最有可能的subjects是null。您是否像这样初始化它:

ArrayList<Map<String, String>> subjects = new ArrayList<Map<String, String>>();

最新更新