-2

I am new to Android Development and I get a NullPointerException when trying to get a writable database. Here is the code:

Main Activity

public class MainActivity extends AppCompatActivity {

    MyDatabase myDatabase;
    SQLiteDatabase sqLiteDatabase;
    EditText textOne;
    EditText textTwo;
    Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textOne = (EditText) findViewById(R.id.textOne);
        textTwo = (EditText) findViewById(R.id.textTwo);

    }

    public void addInfo(View view) {
        String name = textOne.getText().toString();
        String address = textTwo.getText().toString();
        myDatabase = new MyDatabase(context);
        sqLiteDatabase = myDatabase.getWritableDatabase();
        myDatabase.addData(name, address, sqLiteDatabase);
        myDatabase.close();

        textOne.setText("");
        textTwo.setText("");

    }
}

My database code:

public class MyDatabase extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "info.db";
    private static final String TABLE_NAME = "Personal_Info";
    private static final String NAME_COLUMN = "names";
    private static final String ADDRESS_COLUMN = "address";
    private static final String ROW_IDENTIFIER = "_id";
    private static int DATABSE_VERSION = 1;
    private static String query = "CREATE TABLE " + TABLE_NAME + "(" + ROW_IDENTIFIER + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME_COLUMN + " TEXT, " + ADDRESS_COLUMN + " TEXT);";

    public MyDatabase(Context context) {
        super(context, DATABASE_NAME, null, DATABSE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {

        try {
            db.execSQL(query);
        } catch (SQLException e) {
            e.printStackTrace();
        }

    }

    public void addData(String name, String address, SQLiteDatabase db) {

        ContentValues contentValues = new ContentValues();
        contentValues.put(NAME_COLUMN,name);
        contentValues.put(ADDRESS_COLUMN,address);
        db.insert(TABLE_NAME,null,contentValues);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        try {
            db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME );
        } catch (SQLException e) {
            e.printStackTrace();
        }

        onCreate(db);
    }
}

The error is thrown on this line in MainActivity:

myDatabase = new MyDatabase(context);

All input is welcome.

Pang
  • 9,564
  • 146
  • 81
  • 122

1 Answers1

0

You never initialized the variable context, so it is null. Since you have an Activity, you might as well just do this:

myDatabase = new MyDatabase(this);

where this refers to the Activity instance. You can do this inside of onCreate() if you like, or leave it where it is inside of addItem().

Karakuri
  • 38,365
  • 12
  • 84
  • 104