添加Hashmap的ArrayList给出了NPE

时间:2014-03-19 21:31:55

标签: android arraylist hashmap

    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块中首次遇到它时会停止。 谁能帮帮我吗。 我检查了值的存在并键入了hashmap,它在我的log cat中返回true(yesagain yes)但仍然是subjects.add(subMap)返回一个NPE。

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

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

subjects.add(subMap);

将抛出NPE。

答案 1 :(得分:0)

最有可能subjects为空。你有没有像这样初始化它:

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