2012-03-01 2 views
0

를 throw 나는 내 응용 프로그램에 다음 코드를 가지고 :파일 목록은 NullPointerException이

String[] filelist = APP.getContext().filelist(); 

... 

public class APP extends Application { 
    static Context theContext; 

    public void onCreate() { 
     super.onCreate(); 
     theContext = this; 
    } 

    public static Context getContext() { 
     Log.v("APP", "APP.getContext() called."); 
     return theContext; 
    } 
} 

에 상관없이이 코드를 다시 작성 방법 NullPointerException을 반환 Context.filelist() 방법. 왜 그렇게했을까요?

VERBOSE에 로그인하면 getContext()이 표시됩니다.

로그 캣 :

D/AndroidRuntime( 342): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<< 
D/AndroidRuntime( 342): CheckJNI is ON 
D/AndroidRuntime( 342): Calling main entry com.android.commands.am.Am 
I/ActivityManager( 83): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.gobernador/.TopPage } from pid 342 
I/ActivityManager( 83): Start proc com.gobernador for activity com.gobernador/.TopPage: pid=350 uid=10036 gids={3002} 
D/AndroidRuntime( 342): Shutting down VM 
D/dalvikvm( 342): GC_CONCURRENT freed 102K, 69% free 319K/1024K, external 0K/0K, paused 1ms+1ms 
D/dalvikvm( 342): Debugger has detached; object registry had 1 entries 
I/AndroidRuntime( 342): NOTE: attach of thread 'Binder Thread #3' failed 
W/dalvikvm( 350): Exception Ljava/lang/NullPointerException; thrown while initializing Lcom/gobernador/APP; 
W/dalvikvm( 350): Class init failed in newInstance call (Lcom/gobernador/APP;) 
D/AndroidRuntime( 350): Shutting down VM 
W/dalvikvm( 350): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
I/ARMAssembler( 83): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x444ea6f0:0x444ea8a8] in 1886492 ns 
E/AndroidRuntime( 350): FATAL EXCEPTION: main 
E/AndroidRuntime( 350): java.lang.ExceptionInInitializerError 
E/AndroidRuntime( 350): at java.lang.Class.newInstanceImpl(Native Method) 
E/AndroidRuntime( 350): at java.lang.Class.newInstance(Class.java:1409) 
E/AndroidRuntime( 350): at android.app.Instrumentation.newApplication(Instrumentation.java:957) 
E/AndroidRuntime( 350): at android.app.Instrumentation.newApplication(Instrumentation.java:942) 
E/AndroidRuntime( 350): at android.app.LoadedApk.makeApplication(LoadedApk.java:461) 
E/AndroidRuntime( 350): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3260) 
E/AndroidRuntime( 350): at android.app.ActivityThread.access$2200(ActivityThread.java:117) 
E/AndroidRuntime( 350): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:969) 
E/AndroidRuntime( 350): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime( 350): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime( 350): at android.app.ActivityThread.main(ActivityThread.java:3683) 
E/AndroidRuntime( 350): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime( 350): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime( 350): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime( 350): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime( 350): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime( 350): Caused by: java.lang.NullPointerException 
E/AndroidRuntime( 350): at com.gobernador.ReaderWriter.<init>(ReaderWriter.java:20) 
E/AndroidRuntime( 350): at com.gobernador.APP.<clinit>(APP.java:11) 
E/AndroidRuntime( 350): ... 16 more 
W/ActivityManager( 83): Force finishing activity com.gobernador/.TopPage 

PER 허용 대답은 : 내가 쓴 코드는 순서가 있었다. 위의 줄을 포함하는 생성자를 theContext = this; 뒤에 줄로 이동했습니다.

+1

APP 란 무엇입니까? 당신이 null이 아니라고 확신합니까? – kosa

+1

배열을 초기화 할 필요가 없으므로 선언이면 충분합니다. –

+0

APP는 [this] (http://stackoverflow.com/questions/987072/using-application-context-everywhere) 일하는 방식과 매우 유사합니다. 내가 이것을하는 방식을 재 설계해야 하는가? – gobernador

답변

0

theContext은 클래스가 인스턴스화 될 때까지 초기화되지 않으므로 그때까지 null이됩니다.

getContext() 방법 비 정적을 만들고 그 클래스

방법 중 하나의 인스턴스에서 호출 응용 프로그램에서 다른 활동에서 호출

((APP)(this.getApplication())).getContext().filelist() 

입니다.

+0

사실 저는'theContext'에 어떤 값을 저장하기 전에 해당 코드 행을 포함하는 생성자를' APP.onCreate()'. 고맙습니다! – gobernador

0

"새로운 문자열 [9]"는 쓸모가 없습니다. 다음과 같이 간단하게 작성할 수 있습니다.

final String[] filelist = APP.getContext().filelist(); 

그러나 문제가 해결되지는 않습니다. 문제는 "APP"가 null이거나 "APP.getContext()"가 null을 반환한다는 것입니다.