Получение исключения нулевого указателя при использовании метода isEmpty () - PullRequest
6 голосов
/ 26 декабря 2011

Я пытаюсь реализовать функцию входа в мою программу, но она возвращает исключение нулевого указателя.Я понимаю, что это происходит, когда вы ссылаетесь на место в памяти, в котором ничего нет, но насколько я вижу, я правильно создал все свои объекты - пожалуйста, исправьте меня, если я ошибаюсь!

Япытаюсь реализовать функцию добавления пользователя: у меня есть список имен пользователей и паролей, и у меня есть метод, который читает этот файл и сохраняет его в массиве.Я хочу записать новый логин в список, поэтому я написал новый метод, который преобразует этот массив в ArrayList и в конечном итоге записывает новый логин в него, а затем снова записывает файл логина.Проблема в том, что я получаю исключение нулевого указателя.

Метод 1:

public String[] readFile(){
    ArrayList<String> dataList = new ArrayList<String>();
    String Line;
    try {
        String line = br.readLine();
        do {                
            dataList.add(Line);
            line = br.readLine();
        }
        while (!line.isEmpty());
        br.close ();
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    String[] dataArr = new String[dataList.size()];
    dataArr = dataList.toArray(dataArr);

    return dataArr; // Returns an array containing the separate lines of the file
}

Метод 2:

public void addNewUser (String username, String password){
    String[] dataArr = readFile();  // Read in the list of profiles and store it in an array
    ArrayList<String> dataAL = new ArrayList<String>(Arrays.asList(dataArr));   // store array of profiles as ArrayList
    dataAL.add(username + "\t" + password);

}

Ответы [ 4 ]

22 голосов
/ 26 декабря 2011

Вы, вероятно, получаете нулевой указатель здесь

while (!line.isEmpty());

изменить на

while(line!=null && !line.isEmpty())

Если вы обратили внимание на трассировку стека исключения, вы должны увидеть точную строку, в которой вызывается исключение

1 голос
/ 26 декабря 2011

BufferedReader.readLine () вернет ноль, если достигнут конец потока.Итак, вы хотите

while (line != null && !line.isEmpty())
0 голосов
/ 26 декабря 2011

Я не понимаю, почему вы добавляете нулевые значения в dataList в методе readFile.В любом случае, я изменил ваш код:

Метод 1 :

public ArrayList<String> readFile(){
    ArrayList<String> dataList = new ArrayList<String>();

    try {
        //File & File Reader/Stream Initialization Logic

        while(line = br.readLine() != null && !line.isEmpty()) {               
            dataList.add(line);
        }
    } catch (IOException IOE) {
        //IO Exception Handling
    } catch (Exception e) {
        //General Exception Handling
    } finally {
        //close the reader/streams here
    }

    return dataList;
}

Метод 2 :

public void addNewUser (String username, String password){
    ArrayList<String> dataAL = readFile();
    dataAL.add(username + "\t" + password);
}
0 голосов
/ 26 декабря 2011

Измените тело вашего блока try на:

String line = br.readLine();
while (line != null) {                
    dataList.add(Line);
    line = br.readLine();
}
br.close ();

Если вы хотите игнорировать пустые строки, измените его следующим образом:

String line = br.readLine();
while (line != null) {                
    if (!line.isEmpty()) {
        dataList.add(Line);
    }
    line = br.readLine();
}
br.close ();

Другие ответы, предложенные такfar остановит чтение в первой пустой строке.(Если у вас нет пустых строк, вам не нужно звонить isEmpty().)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...