There is the SQLiteCreate
that extends SQLiteOpenHelper
to create the database and SQLiteController
to control the values. On the debug i saw that the variable "banco" in the SQLiteController constructor is getting NULL
when I create an object of SQLiteController.
SQLiteCreate class:
package din.uem.ajudaamao.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class SQLiteCreate extends SQLiteOpenHelper {
public static final int VERSAO = 1;
public static final String NOME_BANCO = "database.db";
public static final String TABELA = "contatos";
public static final String ID = "_id";
public static final String NOME = "nome";
public static final String NUMERO = "numero";
public static final String MENSAGEM = "mensagem";
public static final String TIPO = "tipo";
public SQLiteCreate(Context context) {
super(context, NOME_BANCO, null, VERSAO);
}
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "CREATE TABLE " + TABELA + " ("
+ ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ NOME + " TEXT, "
+ NUMERO + " TEXT, "
+ MENSAGEM + " TEXT, "
+ TIPO + " TEXT)";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABELA);
onCreate(db);
}
}
SQLiteController class:
package din.uem.ajudaamao.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import din.uem.ajudaamao.classes.Contato;
public class SQLiteController {
private SQLiteDatabase db;
private SQLiteCreate banco;
public SQLiteController(Context context) {
banco = new SQLiteCreate(context);
}
public String insereDado(Contato contato) {
db = banco.getWritableDatabase();
ContentValues valores = new ContentValues();
valores.put(SQLiteCreate.NOME, contato.name);
valores.put(SQLiteCreate.MENSAGEM, contato.message);
valores.put(SQLiteCreate.NUMERO, contato.phoneNumber);
valores.put(SQLiteCreate.TIPO, contato.getType());
long resultado = db.insert(SQLiteCreate.TABELA, null, valores);
db.close();
if (resultado == -1)
return "Erro ao inserir registro";
else
return "Registro inserido com sucesso";
}
public Cursor carregaDados() { // NOT IN USE SO FAR
Cursor cursor;
String[] campos = {SQLiteCreate.ID, SQLiteCreate.NOME};
db = banco.getReadableDatabase();
cursor = db.query(SQLiteCreate.TABELA, campos, null, null, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
db.close();
return cursor;
}
}
Class where I try to create the object (in the addContato method)
package din.uem.ajudaamao.activities;
imports...
public class ContatosActivity extends AppCompatActivity {
TabHost host;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contatos);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("Contatos");
// -------------------------------- TAB CONFIG ---------------------------------------------- //
host = (TabHost)findViewById(R.id.tabHost);
host.setup();
// Tab 1
TabHost.TabSpec spec = host.newTabSpec("Emergência");
spec.setContent(R.id.tabEmergencia);
spec.setIndicator("Emergência");
host.addTab(spec);
//Tab 2
spec = host.newTabSpec("Atenção");
spec.setContent(R.id.tabAtencao);
spec.setIndicator("Urgente");
host.addTab(spec);
//Tab 3
spec = host.newTabSpec("Não Urgente");
spec.setContent(R.id.tabNaoUrgente);
spec.setIndicator("Não Urgente");
host.addTab(spec);
// ------------------------------ TAB CONFIG END -------------------------------------------- //
// --------------------------- setOnClickListener --------------------------------------------//
final ListView lvContatosEmergencia = (ListView)findViewById(R.id.lvContatosEmergencia);
lvContatosEmergencia.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent itContatoInfo = new Intent(ContatosActivity.this, ContatoInfo.class);
itContatoInfo.putExtra("position", position);
itContatoInfo.putExtra("type", Contato.EMERGENCIA);
startActivity(itContatoInfo);
}
});
final ListView lvContatosAtencao = (ListView)findViewById(R.id.lvContatosAtencao);
lvContatosAtencao.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent itContatoInfo = new Intent(ContatosActivity.this, ContatoInfo.class);
itContatoInfo.putExtra("position", position);
itContatoInfo.putExtra("type", Contato.ATENCAO);
startActivity(itContatoInfo);
}
});
final ListView lvContatosNaoUrgente = (ListView)findViewById(R.id.lvContatosNaoUrgente);
lvContatosNaoUrgente.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent itContatoInfo = new Intent(ContatosActivity.this, ContatoInfo.class);
itContatoInfo.putExtra("position", position);
itContatoInfo.putExtra("type", Contato.NAO_URGENTE);
startActivity(itContatoInfo);
}
});
// --------------------------- END OnClickListener -------------------------------------------//
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.contatos_menu, menu);
return true;
}
public void addContato(Contato contato, int tipo) {
if (tipo == Contato.EMERGENCIA) {
EmergenciaFragment fragEmergencia = new EmergenciaFragment();
fragEmergencia.addContato(contato);
}
else if(tipo == Contato.ATENCAO) {
AtencaoFragment.addContato(contato);
}
else if(tipo == Contato.NAO_URGENTE) {
NaoUrgenteFragment.addContato(contato);
}
SQLiteController controller = new SQLiteController(this);
String resultado = controller.insereDado(contato);
}
public void showAddContatoDialog(final int tipo) {
final Dialog dbAddContato = new Dialog(this);
dbAddContato.setContentView(R.layout.dialogbox_add_contato);
dbAddContato.setTitle("Adicionar Contato");
Button dbbtAdd = (Button)dbAddContato.findViewById(R.id.btAdicionar);
Button dbbtCancelar = (Button)dbAddContato.findViewById(R.id.btCancelar);
dbbtCancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbAddContato.cancel();
}
});
dbbtAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Contato contato = new Contato(tipo);
EditText etNome = (EditText) dbAddContato.findViewById(R.id.etNome);
EditText etNumero = (EditText) dbAddContato.findViewById(R.id.etNumero);
EditText etDDD = (EditText) dbAddContato.findViewById(R.id.etDDD);
EditText etMensagem = (EditText) dbAddContato.findViewById(R.id.etMensagem);
if (etNome.getText().toString().isEmpty() || etDDD.getText().toString().isEmpty() || etNumero.getText().toString().isEmpty() || etMensagem.getText().toString().isEmpty()) {
Toast.makeText(getApplicationContext(), "Todos os campos devem ser preenchidos", Toast.LENGTH_SHORT).show();
} else {
contato.name = etNome.getText().toString();
contato.phoneNumber = etNumero.getText().toString();
contato.message = etMensagem.getText().toString();
addContato(contato, tipo);
Toast.makeText(getApplicationContext(), "Contato Adicionardo", Toast.LENGTH_SHORT).show();
dbAddContato.cancel();
}
}
});
dbAddContato.show();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.action_add:
Intent itAddContato = new Intent(this, AddContatoActivity.class);
startActivity(itAddContato);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onResume() {
super.onResume();
Utility.refreshListView(Contato.EMERGENCIA);
Utility.refreshListView(Contato.ATENCAO);
Utility.refreshListView(Contato.NAO_URGENTE);
}
}
Error log
[enter image description here][1]FATAL EXCEPTION: main
Process: din.uem.ajudaamao, PID: 29880
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
at din.uem.ajudaamao.database.SQLiteController.insereDado(SQLiteController.java:21)
at din.uem.ajudaamao.activities.ContatosActivity.addContato(ContatosActivity.java:125)
at din.uem.ajudaamao.activities.AddContatoActivity.onOptionsItemSelected(AddContatoActivity.java:61)
at android.app.Activity.onMenuItemSelected(Activity.java:2912)
at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:404)
at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:185)
at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100)
at android.support.v7.app.AppCompatDelegateImplV7.onMenuItemSelected(AppCompatDelegateImplV7.java:655)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:948)
at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618)
at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:139)
at android.view.View.performClick(View.java:5201)
at android.view.View$PerformClick.run(View.java:21163)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)