Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Null pointer Exception on .setOnClickListener

Tags:

I am having an issue with a click listener for a login modal submit button.

This is the error.

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference 

I have a reasonable understanding of what a null pointer exception is and I have search thoroughly for an issue similar to mine. I have tried to reformat the click listener in several ways, made sure I have the correct view ID etc.

package... import... public class MainActivity extends ActionBarActivity implements     NavigationDrawerFragment.NavigationDrawerCallbacks {      //Variables     String currentPage = "";     Stack<String> crumbs = new Stack<String>();     //Fragment managing the behaviors, interactions and presentation of the navigation drawer.     private NavigationDrawerFragment mNavigationDrawerFragment;     // Used to store the last screen title. For use in {@link #restoreActionBar()}.     public CharSequence mTitle;     //temp     AuthenticateUserTokenResult authenticateUserTokenResult;     String loginErrorMessage = "";     String loginErrorTitle = "";     Boolean logonSuccessful = false;     Dialog loginDialog;      // Login EditTexts     EditText Username;     EditText CompanyID;     EditText Password;     Button Submit;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);         mTitle = getTitle();  // Set up the drawer.         mNavigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));          if(authenticateUserTokenResult == null) {             attemptLogin();         }     }      public void attemptLogin() {         loginDialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar);         loginDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);         loginDialog.setContentView(R.layout.login_modal);         loginDialog.setCancelable(false);         //loginDialog.setOnCancelListener(cancelListener);         loginDialog.show();         Submit = (Button)findViewById(R.id.Submit);         Submit.setOnClickListener(new View.OnClickListener() // the error is on this line (specifically the .setOnClickListener)         {             @Override             public void onClick(View v)             {                 ClyxUserLogin user = new ClyxUserLogin();                 Username = (EditText)findViewById(R.id.Username);                 user.logon = Username.getText().toString();                 CompanyID = (EditText)findViewById(R.id.CompanyID);                 user.idCompany = Integer.parseInt(CompanyID.getText().toString());                 Password = (EditText)findViewById(R.id.Password);                 user.password = Password.getText().toString();                 user.idApplication = 142;                 authenticate(user);             }         });     } 

There is more, obviously, but not relevant to the topic I think. Here is the XML file for the dialog that has the button on it.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:background="#3366FF">      <RelativeLayout         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:layout_centerInParent="true"         android:background="#FFFFFF" >          <TextView             android:id="@+id/LoginTitle"             android:layout_width="200dp"             android:layout_height="wrap_content"             android:gravity="center_horizontal"             android:layout_marginTop="10dp"             android:layout_marginStart="10dp"             android:textColor="#000000"             android:textSize="20sp"             android:text="Login" />          <EditText             android:id="@+id/Username"             android:layout_width="200dp"             android:layout_height="wrap_content"             android:layout_below="@+id/LoginTitle"             android:layout_margin="10dp"             android:hint="Username" />          <EditText             android:id="@+id/CompanyID"             android:layout_width="200dp"             android:layout_height="wrap_content"             android:layout_below="@+id/Username"             android:layout_alignStart="@+id/Username"             android:inputType="number"             android:hint="Company ID" />          <EditText             android:id="@+id/Password"             android:layout_width="200dp"             android:layout_height="wrap_content"             android:layout_below="@+id/CompanyID"             android:layout_alignStart="@+id/Username"             android:layout_marginTop="10dp"             android:layout_marginBottom="10dp"             android:inputType="textPassword"             android:hint="Password" />          <Button             android:id="@+id/Submit"             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:layout_below="@+id/Password"             android:layout_marginBottom="10dp"             android:layout_centerHorizontal="true"             android:text="Login" />      </RelativeLayout>  </RelativeLayout> 

Any help would be greatly appreciated.

like image 691
Jack.Ramsden Avatar asked Jan 28 '15 13:01

Jack.Ramsden


1 Answers

Submit is null because it is not part of activity_main.xml

When you call findViewById inside an Activity, it is going to look for a View inside your Activity's layout.

try this instead :

Submit = (Button)loginDialog.findViewById(R.id.Submit); 

Another thing : you use

android:layout_below="@+id/LoginTitle" 

but what you want is probably

android:layout_below="@id/LoginTitle" 

See this question about the difference between @id and @+id.

like image 119
2Dee Avatar answered Oct 21 '22 05:10

2Dee