2011-12-29 5 views
0

getDir이 아직 존재하지 않으면 디렉토리를 생성한다는 것을 이해했습니다. 하지만 다음과 같이 충돌합니다.getDir에서 NullPointerException이 발생하는 이유는 무엇입니까?

File dir= getDir(file,Context.MODE_PRIVATE); 

파일의 유형이 String입니다. 여기

12-29 21:56:09.456: ERROR/AndroidRuntime(631): java.lang.NullPointerException 
12-29 21:56:09.456: ERROR/AndroidRuntime(631):  at android.content.ContextWrapper.getDir(ContextWrapper.java:198) 

를 코드입니다 : 로그 캣 보여줍니다 BTW

public class ReportHome extends Application{ 
public ReportHome(String message, String file){ 
    …some code… 
    inf(tosend,file); 
} 
public void inf(String c, String file){ 
    File dir= getDir(file,Context.MODE_PRIVATE); 

: 올바르게 로그 캣 하나 개 이상의 라인을 포맷하는 트릭은 무엇인가?

답변

4

file 인수가 null이 아닌 것이 확실합니까?

그렇지 않으면, 다른 가능성은 당신이 정상적인 환경에서 이것을 실행하지 않는다는 것입니다.

source code for getDir()에서 볼 수있는 유일한 다른 방법은 mBase (현재 Context을 보유하는 개인 변수)이 null입니다. 나머지 코드를 보지 않으면 어떻게 될지 잘 모르겠습니다.

+0

예, "getback"이 있습니다 – michaelsmith

+0

나는 조금 더 대답을 확장했습니다. 어떤 컨텍스트가 여기에 기초하지 않았을만한 이유가 있습니까? (활동의 내부입니까? 아니면 다른 곳입니까?) –

0

그 자체로 getDir() 메서드는 그저 내재 된 Context 개체 (예 : ContextWrapper에 대한 모든 호출과 마찬가지로)에 대한 호출을 위임하기 때문에별로 흥미롭지 않습니다.

@Override 
public File getDir(String name, int mode) { 
    return mBase.getDir(name, mode); 
} 

어디에서 방법을 호출하는지 알고 있어야합니다. mBaseContextWrapper의 생성자 또는 attachBaseContext()의 생성자가 호출 될 때 설정됩니다. filenull이 아니라고 확신하는 경우 이전 경로를 찍지 않은 것처럼 보입니다. getBaseContext()에 대해 반환 된 결과를 인쇄/디버깅하여 작업중인 컨텍스트가 실제로 null이 아닌지 확인할 수 있습니까?

+0

컨텍스트입니다. 컨텍스트를 생성자에 추가하고 getDir을 수행하는 데이 컨텍스트를 사용하면 모든 것이 올바르게 작동합니다. 감사합니다. – michaelsmith

+0

반갑습니다. 나는 Trevor가 기본적으로 내가 말한 것을 포함하도록 원래 답변을 편집했다고 게시 한 후에 만 ​​알아 차렸다. 미안하지만. –

1

Application을 포함한 모든 구성 요소에 생성자를 구현하지 마십시오. super.onCreate()을 호출 한 후이 논리를 onCreate()으로 이동하십시오.

관련 문제