奇怪的NullPointerException错误

时间:2011-03-22 09:37:43

标签: android file exception nullpointerexception

我有这个片段:

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) );
}

我的问题是,它总是在if(helper.read(file).equals(""))上抛出NullPointerException。我在两个对象上做了Log.d()(就像你在上面的代码中看到的那样),但它并没有抛出那个exeption。起初,我虽然在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;
}

我不确定我的代码有什么问题。也许我想念一些东西,但我无法理解。

更新

我将代码修改为return (data == null) ? "" : data;

2 个答案:

答案 0 :(得分:2)

我认为bfr.readLine();返回null,因此helper.read(file)为null。

BufferedReader的readline返回行的内容,如果在读取器结束之前没有读取任何字符,则返回null。

您确定该文件不为空。 file.toString()将文件对象转换为字符串表示形式,但您不知道该文件是否为空。

答案 1 :(得分:2)

而不是记录,尝试调试并查看真正发生的事情......

我的猜测:在调试时,您会看到bfr.readLine()返回null,它存储在data中。这导致read()也返回null。