2012-03-01 106 views
0

我在我的应用程序下面的代码:文件清单抛出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; 
    } 
} 

Context.filelist()返回NullPointerException不管我怎么重写这个代码的方法。为什么会这样做?

我可以确认VERBOSE登录getContext()显示。

的logcat:

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 2012-03-01 21:03:02

+1

你不必初始化数组,声明就足够了。 – 2012-03-01 21:03:34

+0

APP与[this](http://stackoverflow.com/questions/987072/using-application-context-everywhere)非常类似。我应该重新设计我这样做的方式吗? – gobernador 2012-03-01 21:23:25

回答

0

theContext直到你的类被实例化时才会被初始化,所以直到那时它才会是null。

充分利用getContext()方法非静态和从该类

一种方式的实例调用它的呼叫

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

从应用程序中的另一个活动。

+0

接受,因为你让我意识到我在调用包含有问题的代码行的构造函数之前,我实际上已经通过''' APP.onCreate()'。谢谢! – gobernador 2012-03-04 04:35:09

0

“new String [9]”没用。你可以简单地这样写:

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

但它不会解决你的问题。事情是,要么“APP”为空或“APP.getContext()”返回空