Eu estou iniciando em android, e estou tendo um problema com Null Pointer Exception quando eu tento inserir/ realizar um cadastro no banco de dados do Sqlite (Personal expert).
Espero que possam me ajudar
Meu codigo
[code]public class DbAdapter {
private static final String DBNAME = "banco_de_dados";
private static final String DATABASE_TABLE = "Medicamento";
private static final int DATABASE_VERSION = 1;
public static final String KEY_NOME_MEDICAMENTO = "nome_medicamento";
public static final String KEY_FORMA_FARMACEUTICA = "forma_farmaceutica";
public static final String KEY_VIAS_ADMINISTRACAO = "vias_administracao";
public static final String KEY_ROWID = "_id";
public DatabaseHelper mDHelper;
public SQLiteDatabase mDb;
private static final String DATABASE_CREATE = "create table"
+ DATABASE_TABLE + "(" + KEY_ROWID
+ "integer primary key autoincrement, " + KEY_NOME_MEDICAMENTO
+ "text not null, " + KEY_FORMA_FARMACEUTICA + "text not null, "
+ KEY_VIAS_ADMINISTRACAO + "text not null);";
private final Context mCtx;
public DbAdapter(Context ctx) {
this.mCtx = ctx;
}
public DbAdapter open() throws SQLException {
mDHelper = new DatabaseHelper(mCtx);
mDb = mDHelper.getWritableDatabase();
return this;
}
public void close() {
mDHelper.close();
}
public long createDb(String nome_medicamento, String vias_administracao,
String forma_farmaceutica) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_NOME_MEDICAMENTO, nome_medicamento);
initialValues.put(KEY_FORMA_FARMACEUTICA, forma_farmaceutica);
initialValues.put(KEY_VIAS_ADMINISTRACAO, vias_administracao);
return mDb.insert(DATABASE_TABLE, null, initialValues);
}
public boolean deleteDb(long rowId) {
return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public boolean updateDb(long rowId, String nome_medicamento,
String forma_farmaceutica, String vias_administracao) {
ContentValues args = new ContentValues();
args.put(KEY_NOME_MEDICAMENTO, nome_medicamento);
args.put(KEY_FORMA_FARMACEUTICA, forma_farmaceutica);
args.put(KEY_VIAS_ADMINISTRACAO, vias_administracao);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
public Cursor fetchAllMedicamentos() {
return mDb.query(DATABASE_TABLE, new String[] { KEY_ROWID,
KEY_NOME_MEDICAMENTO, KEY_FORMA_FARMACEUTICA,
KEY_VIAS_ADMINISTRACAO }, null, null, null, null, null);
}
public Cursor fetchMedicamentos(long rowId) throws SQLException {
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {
KEY_ROWID, KEY_NOME_MEDICAMENTO, KEY_FORMA_FARMACEUTICA,
KEY_VIAS_ADMINISTRACAO }, KEY_ROWID + "=" + rowId, null, null,
null, null, null);
if (mCursor != null) {mCursor.moveToFirst();
}
return mCursor;
}
private static class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context) {
super(context, DBNAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
}[/code]
[code]public class RemedioAdd extends Activity {
private Button createMedicine;
private EditText mNomeMedicamento;
private EditText mFormaFarmaceutica;
private EditText mViasDeAdministracao;
private Long mRowId;
private DbAdapter mDHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_remedio_add);
mDHelper = new DbAdapter(this);
mNomeMedicamento = (EditText) findViewById(R.id.editText1);
mFormaFarmaceutica = (EditText) findViewById(R.id.editText2);
mViasDeAdministracao = (EditText) findViewById(R.id.editText3);
createMedicine = (Button) findViewById(R.id.button1);
mRowId = savedInstanceState != null ? savedInstanceState
.getLong(DbAdapter.KEY_ROWID) : null;
registerButtonListenersAndSetDefaultText();
}
private void registerButtonListenersAndSetDefaultText() {
createMedicine.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
mDHelper.open();
saveState();
setResult(RESULT_OK);
Toast.makeText(RemedioAdd.this,
getString(R.string.hello_world),
Toast.LENGTH_SHORT).show();
mDHelper.close();
finish();
}
});
}
private void setRowIdFromIntent() {
if (mRowId == null) {
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(DbAdapter.KEY_ROWID)
: null;
}
}
protected void onPause() {
super.onPause();
mDHelper.close();
}
protected void onResume() {
super.onResume();
mDHelper.open();
setRowIdFromIntent();
populateFields();
}
@SuppressWarnings("deprecation")
private void populateFields() {
if (mRowId != null) {
Cursor medicamento = mDHelper.fetchMedicamentos(mRowId);
startManagingCursor(medicamento);
mNomeMedicamento.setText(medicamento.getString(medicamento
.getColumnIndexOrThrow(DbAdapter.KEY_NOME_MEDICAMENTO)));
mFormaFarmaceutica.setText(medicamento.getString(medicamento
.getColumnIndexOrThrow(DbAdapter.KEY_FORMA_FARMACEUTICA)));
mViasDeAdministracao.setText(medicamento.getString(medicamento
.getColumnIndexOrThrow(DbAdapter.KEY_VIAS_ADMINISTRACAO)));
medicamento.close();
}
}
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong(DbAdapter.KEY_ROWID, mRowId);
}
private void saveState() {
String nomeMedicamento = mNomeMedicamento.getText().toString();
String formaFarmaceutica = mFormaFarmaceutica.getText().toString();
String viasDeAdministracao = mViasDeAdministracao.getText().toString();
if (mRowId == null) {
Long id = mDHelper.createDb(nomeMedicamento, viasDeAdministracao,
formaFarmaceutica);
if (id > 0) {
mRowId = id;
}
} else {
mDHelper.updateDb(mRowId, nomeMedicamento, formaFarmaceutica,
viasDeAdministracao);
}
}
[/code]
O ERRO mostra que esta no metodo private void registerButtonListenersAndSetDefaultText() {
Estava acompanhando pelo Android for Dummies.