2011-03-22 3 views
0

나는이 조각을했습니다 :이상한 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()를 두 객체 모두에서 수행했지만 예외를 throw하지는 않았습니다. 처음에 나는 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

에 내 코드를 생각 나는 수정 사항 bfr.readLine(); helper.read (file)가 null이기 (위해) 때문에, null가 돌려 주어집니다.

BufferedReader의 readline은 행의 내용을 반환하거나 판독기 끝에 도달하기 전에 읽은 문자가 없으면 null을 반환합니다.

파일이 비어 있지 않습니까? file.toString()은 파일 객체를 문자열 표현으로 변환하지만 파일이 비어 있는지 여부는 알 수 없습니다. 대신 로깅

2

는 ...

내 생각을 디버깅하려고 정말 세드릭 참조 : 디버깅하는 동안 당신이 bfr.readLine() 반환 data에 저장되어있는 널 (null) 것을 볼 수 있습니다. 결과적으로 null이 반환되는 read()이 발생합니다.

+0

당신 말이 맞습니다. 데이터가 비어 있기 때문입니다. – ariefbayu