空指针异常不一致

时间:2013-08-01 08:21:09

标签: java android json

我正在尝试从设备外部目录中读取.json文件。

我有一个名为ExternalFile的类,用于读取文件并将内容作为字符串返回。

这是班级:

public class ExternalFile
{
final String EXTERNAL_STORAGE = Evironment.getExternalStorageDirectory().toString();
final String FIRSTDROID_DIRECTORY = EXTERNAL_STORAGE + "/firstdroid/";
final String SALES_DIRECTORY = FIRSTDROID_DIRECTORY + "sales/";
final String REFERENCE_DIRECTORY = FIRSTDROID_DIRECTORY + "reference/";

public String readFile(String direcectory, String fileName)
{
    BufferedReader br;
    StringBuilder sBuffer;
    File JSON;
    String line;
    String retVal = null;

    try
    {
        sBuffer = new StringBuilder();
        JSON = new File(direcectory, fileName);

        br = new BufferedReader(new FileReader(JSON));
        while ((line = br.readLine()) != null)
        {
            sBuffer.append(line);
            sBuffer.append('\n');
        }

        retVal = sBuffer.toString();

        Log.d("File Results: ", retVal);
    }
    catch (Exception e)
    {
        Log.e("readJSON", e.getMessage());
    }

    return retVal;
}

}

当我使用这个类来读取“login.json”文件时,它工作正常。但是,当我使用该类读取“contacts.json”文件时,eclipse警告: “空指针访问:变量readJSON在此位置只能为null”。

    private void getContactNames()
{
    // File jsonCustomers;
    // BufferedReader br= null;
    // StringBuilder sb = null;
    // String line;
    String result;

    ExternalFile readJSON = null;

    try
    {
            result = readJSON.readFile(REFERENCE_DIRECTORY, "contacts.json");

        // pass through the json string
        readNames(result, "contact");
    }
    catch (Exception e)
    {
        messageBox("getCustomerNames", e.toString());
    }
}

唯一的区别是我传入“contacts.json”而不是“login.json”

1 个答案:

答案 0 :(得分:5)

如果您使用变量而没有初始化,Eclipse会发出警告。在您的代码中,您已声明readJSON,但已初始化为null。之后它被用在try块内,这肯定会导致NPE

ExternalFile readJSON = null; //--> you have not intialized readJSON 
try
{
     result = readJSON.readFile(REFERENCE_DIRECTORY, "contacts.json");
              ^^^^^^^^
              null access here