Android 添加Hashmap时的ArrayList提供NPE subMap=newhashmap(); cursor=sdB.query(DataBase.TB,cols,null,null,null,null); cursor.moveToFirst(); 限值=1; while(cursor.moveToNext()){ 极限+=1; } 极限*=2; cursor.moveToFirst(); 做{ 对于(i=i+1;i

Android 添加Hashmap时的ArrayList提供NPE subMap=newhashmap(); cursor=sdB.query(DataBase.TB,cols,null,null,null,null); cursor.moveToFirst(); 限值=1; while(cursor.moveToNext()){ 极限+=1; } 极限*=2; cursor.moveToFirst(); 做{ 对于(i=i+1;i,android,arraylist,hashmap,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

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

    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();
subjects.add(subMap);

将抛出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();
subjects.add(subMap);
ArrayList subjects=new ArrayList();

在何处以及如何初始化
主题
?因为如果您在此行获得NPE:
主题。添加(子映射)
那么你的主题==Null你没有显示
主题的声明和定义
。怎么会有人知道它有什么问题?好的……我现在知道了……非常感谢……非常感谢。事实上,我忘了添加主题=new Arraylist();在添加它之后很有效。很酷。关于NPE的进一步阅读,请参阅以下答案: