Странная ошибка NullPointerException - PullRequest
0 голосов
/ 22 марта 2011

У меня есть этот фрагмент:

Log.d("iBank", "Helper: " + helper.toString());
Log.d("iBank", "File: " + file.toString());
if(helper.read(file).equals(""))
{
    dataDir = Environment.getExternalStoragePublicDirectory(
          Environment.DIRECTORY_DOWNLOADS);
}
else
{
    dataDir = new File( helper.read(file) );
}

Моя проблема в том, что всегда возникает исключение NullPointerException на if(helper.read(file).equals("")). Я сделал Log.d () для обоих объектов (как вы видите на приведенном выше коде), но он не выбрасывал это исключение. Сначала я подумал, что что-то не так на helper.read(). Но, как вы видите ниже, я уже уловил возможную ошибку:

public String read(File file)
{
    if(file == null)
        return "";
    String data = "";
    if( !file.exists())
    {
        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    try {
        FileReader fr = new FileReader(file);
        BufferedReader bfr = new BufferedReader(fr);
        data = bfr.readLine();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return data;
}

Я не уверен, что не так с моим кодом. Может быть, я что-то упускаю, но не могу понять.

UPDATE

Я фиксирую свой код на return (data == null) ? "" : data;

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

Вместо регистрации попробуйте отладить и посмотреть, что на самом деле происходит ...

Мое предположение: во время отладки вы увидите, что bfr.readLine() возвращает ноль, который хранится в data. В результате read() также возвращает ноль.

2 голосов
/ 22 марта 2011

Я думаю, что bfr.readLine (); возвращает ноль, поэтому helper.read (файл) равен нулю.

readline BufferedReader возвращает содержимое строки или ноль, если до конца чтения не было прочитано ни одного символа.

Вы уверены, что файл не пустой? file.toString () преобразует объект файла в строковое представление, но вы не будете знать, пуст файл или нет.

...