diggin
diggin

Reputation: 47

NullPointerException when inserting into a database

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

Answers (2)

Jason
Jason

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

Mark Lee
Mark Lee

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

Related Questions