Reputation: 215
I keep on getting NullPointerException
errors on my app whenever I launch the activity. It just seems strange because everything is declared.
Here's my activity:
package com.example.calendar;
import java.util.Date;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.EditText;
import android.app.Activity;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import com.example.calendar.Appointment;
public class CreateAppointment extends Activity implements OnClickListener{
EditText nameTextBox;
EditText timeTextBox;
EditText detailsTextBox;
Button createButton;
Date date = new Date();
Appointment getNewID;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
createButton = (Button) findViewById(R.id.apptSave);
nameTextBox = (EditText)findViewById(R.id.apptName);//Assign the global name box
timeTextBox = (EditText)findViewById(R.id.apptTime);//Assign the global time box
detailsTextBox = (EditText)findViewById(R.id.apptDetails);//Assign the global details box
createButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.apptSave:
String getNewDate = date.toString();
String getNewTitle = nameTextBox.getText().toString();
String getNewTime = timeTextBox.getText().toString();
String getNewDetails = detailsTextBox.getText().toString();
DBHandler db = new DBHandler(this);
db.addAppointment(new Appointment(getNewID.getID(), getNewDate, getNewTitle, getNewTime, getNewDetails));
finish();
break;
}
}
}
and logcat gives me this:
03-20 11:24:50.800: E/AndroidRuntime(706): FATAL EXCEPTION: main
03-20 11:24:50.800: E/AndroidRuntime(706): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.calendar/com.example.calendar.CreateAppointment}: java.lang.NullPointerException
03-20 11:24:50.800: E/AndroidRuntime(706): Caused by: java.lang.NullPointerException
03-20 11:24:50.800: E/AndroidRuntime(706): at com.example.calendar.CreateAppointment.<init>(CreateAppointment.java:25)
the line with the error is this:
String getNewTitle = nameTextBox.getText().toString();
Upvotes: 0
Views: 135
Reputation: 5234
You are assigning the value of edit-text before entering any value inside it. So you have to move this inside onCreate method.
String getNewDate = date.toString();
String getNewTitle = nameTextBox.getText().toString();
String getNewTime = timeTextBox.getText().toString();
String getNewDetails = detailsTextBox.getText().toString();
So your full code would look something like this,
public class CreateAppointment extends Activity implements OnClickListener{
EditText nameTextBox;
EditText timeTextBox;
EditText detailsTextBox;
Button createButton;
Date date = new Date();
Appointment getNewID;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
createButton = (Button) findViewById(R.id.apptSave);
nameTextBox = (EditText)findViewById(R.id.apptName);//Assign the global name box
timeTextBox = (EditText)findViewById(R.id.apptTime);//Assign the global time box
detailsTextBox = (EditText)findViewById(R.id.apptDetails);//Assign the global details box
String getNewDate = date.toString();
String getNewTitle = nameTextBox.getText().toString();
String getNewTime = timeTextBox.getText().toString();
String getNewDetails = detailsTextBox.getText().toString();
createButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.apptSave:
DBHandler db = new DBHandler(this);
db.addAppointment(new Appointment(getNewID.getID(), getNewDate, getNewTitle, getNewTime, getNewDetails));
finish();
break;
}
}
}
or else you can also put this code in button's click event like,
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.apptSave:
String getNewDate = date.toString();
String getNewTitle = nameTextBox.getText().toString();
String getNewTime = timeTextBox.getText().toString();
String getNewDetails = detailsTextBox.getText().toString();
DBHandler db = new DBHandler(this);
db.addAppointment(new Appointment(getNewID.getID(), getNewDate, getNewTitle, getNewTime, getNewDetails));
finish();
break;
}
}
Upvotes: 1
Reputation: 29670
You are accessing EditText before initializing it in onCreate() method. You need to move following lines in to onCreate() method
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.create);
createButton = (Button) findViewById(R.id.apptSave);
nameTextBox = (EditText)findViewById(R.id.apptName);//Assign the global name box
timeTextBox = (EditText)findViewById(R.id.apptTime);//Assign the global time box
detailsTextBox = (EditText)findViewById(R.id.apptDetails);//Assign the global details box
createButton.setOnClickListener(this);
// move lines here
String getNewDate = date.toString();
String getNewTitle = nameTextBox.getText().toString();
String getNewTime = timeTextBox.getText().toString();
String getNewDetails = detailsTextBox.getText().toString();
}
Upvotes: 1
Reputation: 157487
move
String getNewDate = date.toString();
String getNewTitle = nameTextBox.getText().toString();
String getNewTime = timeTextBox.getText().toString();
String getNewDetails = detailsTextBox.getText().toString();
inside onCreate
, after findViewById
Upvotes: 1