Reputation: 47
I'm developing a program using database. I'm stuck on inserting the data typed from EditText, keep on getting NullPointerException. Here is my code:
AddBusDataActivity.java
public class AddBusDataActivity extends ActionBarActivity {
SQLiteDatabase mBusDatabse;
BusDatabaseHelper mBusDatabaseHelper;
EditText mNumber;
EditText mDestination;
EditText mArrivalTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
mBusDatabaseHelper = new BusDatabaseHelper(AddBusDataActivity.this, Constants.DATABASE_NAME, null, Constants.VERSION);
mNumber = (EditText)findViewById(R.id.number_text);
mDestination = (EditText)findViewById(R.id.destination_text);
mArrivalTime = (EditText)findViewById(R.id.arrival_time);
}
public void addBusActivityButton(View view) {
mBusDatabse = mBusDatabaseHelper.getWritableDatabase();
BusData bus = new BusData(mNumber.getText().toString(), mDestination.getText().toString(), Integer.valueOf(mArrivalTime.getText().toString()));
mBusDatabaseHelper.addBusData(bus); // error here
mBusDatabaseHelper.close();
Toast.makeText(AddBusDataActivity.this, "Bus data successfully added", Toast.LENGTH_SHORT).show();
this.finish();
}
}
BusDatabaseHelper.java
public class BusDatabaseHelper extends SQLiteOpenHelper {
SQLiteDatabase mBusDatabase;
public BusDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+ Constants.TABLE_NAME + " (" + Constants.KEY_ID + " integer primary key autoincrement, " +
Constants.NUMBER + " text not null, " + Constants.DESTINATION + " text not null, " + Constants.ARRIVAL_TIME + " integer not null);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table " + Constants.TABLE_NAME + ";");
onCreate(db);
}
public void addBusData(BusData busData) {
ContentValues busValues = new ContentValues();
busValues.put(Constants.NUMBER, busData.getmNumber());
busValues.put(Constants.DESTINATION, busData.getmDestination());
busValues.put(Constants.ARRIVAL_TIME, busData.getmArrivalTime());
mBusDatabase.insert(Constants.TABLE_NAME, null, busValues); // error here
}
}
Error message
Caused by: java.lang.NullPointerException
at com.id11201478.exercise6.BusDatabaseHelper.addBusData(BusDatabaseHelper.java:36)
at com.id11201478.exercise6.AddBusDataActivity.addBusActivityButton(AddBusDataActivity.java:36)
I have separate Constants.java class for storing thoses values.
Thanks in advance!
Upvotes: 1
Views: 79
Reputation: 11832
It looks like mBusDatabase
in BusDatabaseHelper
is never initialised and therefore is null. Dereferencing it on line 36 causes your NPE.
You don't actually need it if you modify addBusData
to grab it each time:
public void addBusData(BusData busData) {
ContentValues busValues = new ContentValues();
busValues.put(Constants.NUMBER, busData.getmNumber());
busValues.put(Constants.DESTINATION, busData.getmDestination());
busValues.put(Constants.ARRIVAL_TIME, busData.getmArrivalTime());
getWritableDatabase().insert(Constants.TABLE_NAME, null, busValues);
}
Upvotes: 1
Reputation: 301
The variable
BusDatabaseHelper.mBusDatabase
is null.
You need to initialize it!
Otherwise how does the system knows what mBusDatabase is
try to add this before insert
mBusDatabase= this.getWritableDatabase();
Upvotes: 1