2014-05-19 39 views
0

我试图在onCreate方法中为活动添加Button并且正在获取空指针异常;下面是我的代码:NPE当试图动态添加按钮到android活动

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // dynamic content 
     Button b = new Button(this); 
     b.setText("test"); 

     LinearLayout ll = (LinearLayout) findViewById(R.id.linlayout_main); 
     ll.addView(b); 
    } 

的logcat:

05-19 18:42:54.658: D/AndroidRuntime(2338): Shutting down VM 
05-19 18:42:54.658: W/dalvikvm(2338): threadid=1: thread exiting with uncaught exception (group=0xb4a67ba8) 
05-19 18:42:54.668: E/AndroidRuntime(2338): FATAL EXCEPTION: main 
05-19 18:42:54.668: E/AndroidRuntime(2338): Process: net.test.Rem, PID: 2338 
05-19 18:42:54.668: E/AndroidRuntime(2338): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.test.Rem/net.test.Rem.MainActivity}: java.lang.NullPointerException 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.os.Handler.dispatchMessage(Handler.java:102) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.os.Looper.loop(Looper.java:136) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at java.lang.reflect.Method.invoke(Method.java:515) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at dalvik.system.NativeStart.main(Native Method) 
05-19 18:42:54.668: E/AndroidRuntime(2338): Caused by: java.lang.NullPointerException 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at net.test.Rem.MainActivity.onCreate(MainActivity.java:36) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.Activity.performCreate(Activity.java:5231) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
05-19 18:42:54.668: E/AndroidRuntime(2338):  ... 11 more 

36号线是ll.addView(b);

我就使这是因为setContentView不被LinearLayout之前调用其他地方阅读;但似乎是,或者我错过了什么?

+0

'activity_main'中的'linlayout_main'?如果是这样,发布你的logcat输出。它看起来是正确的。 – codeMagic

+0

没有。现在它正在寻找错误的布局 – codeMagic

+0

@TonyHopkinson不是该问题的重复。 – ikdc

回答

0
的ID

我通过在onStart()而不是onCreate()内动态添加内容解决了此问题:

protected void onStart() { 
    super.onStart(); 
    // dynamic content 
    Button b = new Button(this); 
    b.setText("test"); 

    LinearLayout ll = (LinearLayout) findViewById(R.id.linlayout_main); 
    System.out.println(ll); 
    ll.addView(b); 
} 

根据onCreate()文档:

Called when the activity is first created. This is where you should do all of your normal static set up: create views, bind data to lists, etc.

根据onStart()文档:在此基础上,我搬到我的动态代码onStart()

Called when the activity is becoming visible to the user.

和它工作得很好。

0

它是空由于布局ID在你当前的布局并没有发现添加我的setContentView

解决方案::

R.layout.activity_main里面添加的线性布局的linlayout_main