web-dev-qa-db-ja.com

HashMapのputメソッドの使用中にNullPointerException

次のコードはNullPointerExceptionをくれます。問題は次の行にあります。

... 
dataMap.put(nextLine[0], nextLine[6]);

奇妙なのは、上記のコードなしでこのコードを実行したことと、nextLine[0]およびnextLine[6]の呼び出しが期待どおりに機能することです。つまり、csvファイルの要素が返されます。コードでHashMapを宣言して初期化します

HashMap<String, String> dataMap = null;

メソッドの初期

  String[] nextLine;
  int counter=0;
  while (counter<40) {
    counter++;

    System.out.println(counter);
    nextLine = reader.readNext(); 
    // nextLine[] is an array of values from the line
    System.out.println(nextLine[0] + " - " + nextLine[6] +" - " + "etc...");
    dataMap.put(nextLine[0], nextLine[6]);
  }
  return dataMap;
}
23
Ankur
HashMap<String, String> dataMap = new HashMap<String,String>();

この時点では、dataMap変数は初期化されていません。コンパイラに関する警告が表示されるはずです。

39
Codingscape

データマップはどこで初期化されますか?常にnullです。

明確にするために、変数を宣言してnullに設定します。ただし、それがHashMapであるか同様であるかに関係なく、新しいMapをインスタンス化する必要があります。

例えば.

datamap = new HashMap();

(ジェネリックスなどは脇に置いておきます)

5
Brian Agnew

dataMapは宣言されていますが、初期化されていません。それはで初期化することができます

datamap = new HashMap();

3
Sheldon

さて、その行でアクセスされる3つのオブジェクトがあります。上記のprintln呼び出しが機能したため、nextLine [0]およびnextLine [6]がnullでない場合、dataMapから離れます。 dataMap = new HashMap();を行いましたかsomwehere?

1
jcopenha