0

I have to programmatically add a button to linear layout. But the program force closes. Here is the code I am trying:

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

        LinearLayout ll = (LinearLayout) findViewById(R.id.vertic);
        Button button = new Button(this.getApplicationContext());
        LinearLayout.LayoutParams params = (LayoutParams) button.getLayoutParams();
        params.weight = 1;
        button.setText("MR. ABC");
        button.setLayoutParams(params);
        ll.addView(button, params);

    }

And here is the LogCat:

04-13 22:16:44.484: D/dalvikvm(12596): GC_EXTERNAL_ALLOC freed 70K, 50% free 2698K/5379K, external 2013K/2108K, paused 53ms
04-13 22:16:46.000: D/AndroidRuntime(12596): Shutting down VM
04-13 22:16:46.000: W/dalvikvm(12596): threadid=1: thread exiting with uncaught exception (group=0x40015578)
04-13 22:16:46.011: E/AndroidRuntime(12596): FATAL EXCEPTION: main
04-13 22:16:46.011: E/AndroidRuntime(12596): java.lang.RuntimeException: Unable to start activity ComponentInfo{maju.project.tourguide/maju.project.tourguide.RemoveContact}: java.lang.NullPointerException
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.os.Looper.loop(Looper.java:123)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.ActivityThread.main(ActivityThread.java:3687)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at java.lang.reflect.Method.invokeNative(Native Method)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at java.lang.reflect.Method.invoke(Method.java:507)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at dalvik.system.NativeStart.main(Native Method)
04-13 22:16:46.011: E/AndroidRuntime(12596): Caused by: java.lang.NullPointerException
04-13 22:16:46.011: E/AndroidRuntime(12596):    at maju.project.tourguide.RemoveContact.onCreate(RemoveContact.java:31)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-13 22:16:46.011: E/AndroidRuntime(12596):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
04-13 22:16:46.011: E/AndroidRuntime(12596):    ... 11 more

Can anyone please indicate the problem? Thanks in advance

Here is the XML file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/car_wallpaper"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:id="@+id/vertic"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Your Emergency Contacts"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#FFFF" />

</LinearLayout>
4
  • 1
    Does activity_remove_contact.xml have a LinearLayout with the id vertic? Commented Apr 13, 2013 at 17:19
  • Put activity_remove_contact.xml so we can see it please :) Also have you tried changing this.getApplicationContext() by this? Commented Apr 13, 2013 at 17:20
  • I have replaced this.getApplicationContext() by this, but the problem still persists Commented Apr 13, 2013 at 17:37
  • Line 31 is params.weight = 1; Commented Apr 13, 2013 at 17:41

2 Answers 2

3

In Here :

 Button button = new Button(this.getApplicationContext()); //<<<

you are passing Application context for creating an dynamic button which is not valid context because you are adding Button to current Activity Layout so you will need to pass current Activity context for creating Button. change your code as :

     Button button = new Button(this);
     LinearLayout.LayoutParams params = 
          new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                      LinearLayout.LayoutParams.WRAP_CONTENT);
     params.weight = 1;
     button.setText("MR. ABC");
     button.setLayoutParams(params);
     ....

OR

Button button = new Button(Your_Current_Activity.this);
.....

and also make sure you have an layout with vertic id in current Activity layout which you are passing in setContentView

Sign up to request clarification or add additional context in comments.

Comments

0

The reason for NullPointerException is because of this line:

LinearLayout.LayoutParams params = (LayoutParams) button.getLayoutParams();

Here you get params = null and thus in the next line you get the exception.

If you want to use LayoutParams in your button, then you first need to initialize it. This is your code with modification:

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

    LinearLayout ll = (LinearLayout) findViewById(R.id.vertic);
    Button button = new Button(this.getApplicationContext());
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.weight = 1;
    button.setText("MR. ABC");
    button.setLayoutParams(params);
    ll.addView(button, params);
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.