Anton Kogan
Anton Kogan

Reputation: 163

Android EditText NullPointerException

I need to take data from my EditText, which I placed inside dialog.
When i try to access it I catch NullPointerException.

Here is my code:

public class MainActivity extends Activity {

    int imgW  ;
    int imgH  ;

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

    public void OnToolButtonClick(View button)
    {
        switch (button.getId())
        {
        case R.id.btn1:

            final Dialog commentDialog = new Dialog(this);
            commentDialog.setContentView(R.layout.reply);
            Button okBtn = (Button) commentDialog.findViewById(R.id.ok);

            okBtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    final    EditText     w=  (EditText)findViewById(R.id.dialogW);
                    final    EditText     h=  (EditText) findViewById(R.id.dialogH);

                    try {
                        imgW =  Integer.parseInt(w.getText().toString());
                        imgH = Integer.parseInt( h.getText().toString());   

                    }
                    catch (NumberFormatException e) {
                        imgH=0;
                        imgW=0;
                    }

                    Log.i("Size" ,  " w "+ imgW + " h " + imgH);
                    //  drawing_panel_params

                    commentDialog.dismiss();
                }
            });
            Button cancelBtn = (Button) commentDialog.findViewById(R.id.cancel);
            cancelBtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {

                    commentDialog.dismiss();
                }
            });

            commentDialog.show();

            break;
        }
    }
}
}

Main Layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.edittext.MainActivity$PlaceholderFragment" >

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:onClick="OnToolButtonClick"
        android:text="@string/Start_dialog" />

</RelativeLayout>

Layout for dialog

<?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="#ffffff"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/dialogW"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="@string/Wight"
        android:lines="3"
        android:textColor="#000000" />

    <EditText
        android:id="@+id/dialogH"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="@string/Height"
        android:lines="3"
        android:textColor="#000000" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <Button
            android:id="@+id/ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@android:string/ok" />

        <Button
            android:id="@+id/cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@android:string/cancel" />
    </LinearLayout>

</LinearLayout>

I want to know why is this happening..??

Upvotes: 0

Views: 1749

Answers (3)

Apoorv
Apoorv

Reputation: 13520

Change

 final EditText w= (EditText)findViewById(R.id.dialogW);
 final EditText h= (EditText)findViewById(R.id.dialogH);

to

 final EditText w= (EditText)commentDialog.findViewById(R.id.dialogW);
 final EditText h= (EditText)commentDialog.findViewById(R.id.dialogH);

Your dialogW and dialogH are in reply layout which is inflated in commentDialog. You need to use the View in which you inflate the layout in which your EditText exist

Upvotes: 1

Richard Lewin
Richard Lewin

Reputation: 1870

Looking at your code I believe that it won't be finding the view as your not using findViewById() with the view that you set for the dialog.

I.e. change

commentDialog.setContentView(R.layout.reply);

to

View view = getActivity().getLayoutInflater().inflate(R.layout.reply, null);
commentDialog.setContentView(view);

and then change

final EditText w = (EditText) findViewById(R.id.dialogW);
final EditText h = (EditText) findViewById(R.id.dialogH);

to

final EditText w = (EditText) view.findViewById(R.id.dialogW);
final EditText h = (EditText) view.findViewById(R.id.dialogH);

Give that a go and see if you no longer get a NullPointerException.

Upvotes: 0

Android Developer
Android Developer

Reputation: 987

you missed commentDialog in findviewbyId

public class MainActivity extends Activity {

int imgW  ;
int imgH  ;

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

public void OnToolButtonClick(View button)
{
    switch (button.getId())
    {
    case R.id.btn1:

        final Dialog commentDialog = new Dialog(this);
        commentDialog.setContentView(R.layout.reply);
        Button okBtn = (Button) commentDialog.findViewById(R.id.ok);

        okBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                final    EditText     w=  (EditText)commentDialog.findViewById(R.id.dialogW);
                final    EditText     h=  (EditText) commentDialog.findViewById(R.id.dialogH);

                try {
                    imgW =  Integer.parseInt(w.getText().toString());
                    imgH = Integer.parseInt( h.getText().toString());   

                }
                catch (NumberFormatException e) {
                    imgH=0;
                    imgW=0;
                }

                Log.i("Size" ,  " w "+ imgW + " h " + imgH);
                //  drawing_panel_params

                commentDialog.dismiss();
            }
        });
        Button cancelBtn = (Button) commentDialog.findViewById(R.id.cancel);
        cancelBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                commentDialog.dismiss();
            }
        });

        commentDialog.show();

        break;
    }
 }

}

Upvotes: 0

Related Questions