2
I’m using the class sqliteopenhelper from android to database connection, our save() method, is working perfectly, but our search() method, where my cursor lists all registered cities, is not finding the table, bringing the following error in logcat: no such table cidade.
Below follows our city class where it is to display our list of cities and tb follows our Township where lies all methods of bank manipulation.
The mistake happens in the onstart in Cidadeactivity, which calls me Metodo buscar()
of my CidadeDataSource
:
protected void onStart() {
super.onStart();
Log.i(LOGTAG, "Entramos no OnStart");
this.popularLista((ArrayList<Cidade>)ds.buscar());
}
Search method
public List<Cidade> buscar(){
String[] colunas = new String [] {"_id", "nome", "estado"};
Cursor cursor = db.query("cidade", colunas, null, null, null, null, "nome ASC");
Log.i(LOGTAG, "Entramos no Buscar");
return obterLista(cursor);
}
Classe Cidadeactivity
package com.example.biowater3;
import java.util.ArrayList;
import com.example.biowater3.conf.Cidade;
import com.example.biowater3.data.CidadeDataSource;
import com.example.biowater3.helper.CidadeAdapter;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
public class CidadeActivity extends Activity {
public static final String LOGTAG = "Informacoes";
CidadeDataSource ds;
CidadeAdapter adapter;
ArrayList<Cidade> listaCidade;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cidade);
getActionBar().setDisplayHomeAsUpEnabled(true);
startDataBase();
registerForContextMenu ((ListView) findViewById(R.id.cidadeListView));
}
protected void onStart() {
super.onStart();
Log.i(LOGTAG, "Entramos no OnStart");
this.popularLista((ArrayList<Cidade>)ds.buscar());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.cidade, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_conf) {
Intent objIntent = new Intent (this, ConfigActivity.class);
startActivity (objIntent);
}
return super.onOptionsItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
menu.setHeaderTitle(listaCidade.get(info.position).getNome());
getMenuInflater().inflate(R.menu.ctx_cidade_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item;
switch (item.getItemId()) {
case R.id.ctx_cidade_menu_editar :
Intent intent = new Intent(this, CadCidadeActivity.class);
Bundle bundle = new Bundle();
bundle.putSerializable("objCidade", listaCidade.get(info.position) );
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.ctx_cidade_menu_apagar :
excluirCidade(info.position);
break;
default:
break;
}
return true;
}
private void excluirCidade(int posicaoExcluir) {
final int posicaoRemover = posicaoExcluir;
final ArrayList<Cidade> lst = this.listaCidade;
AlertDialog.Builder adb=new AlertDialog.Builder(this);
adb.setTitle("Excluir - " + lst.get(posicaoExcluir).getNome());
adb.setMessage("Tem certeza que deseja excluir este registro?");
adb.setNegativeButton("Não", null);
adb.setPositiveButton("Sim", new AlertDialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int whitch){
if(!(adapter == null)){
ds.deletar(lst.get(posicaoRemover));
Toast.makeText(getApplicationContext(), "O Registro: " + lst.get(posicaoRemover) + "Foi Removido Com Sucesso!!", Toast.LENGTH_LONG).show();
lst.remove(posicaoRemover);
adapter.notifyDataSetChanged();
}
}
});
adb.show();
}
private void startDataBase() {
ds = new CidadeDataSource(this);
ds.open();
}
private void popularLista (ArrayList<Cidade> cidade){
this.listaCidade = cidade;
adapter = new CidadeAdapter(this, this.listaCidade);
ListView lista = (ListView) findViewById(R.id.cidadeListView);
lista.setAdapter (adapter);
}
}
Class Citytource:
package com.example.biowater3.data;
import java.util.ArrayList;
import java.util.List;
import com.example.biowater3.conf.Cidade;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
public class CidadeDataSource {
public static final String LOGTAG = "informacoes";
private SQLiteDatabase db;
private MainDBBio dbHelper;
public CidadeDataSource(Context context){
dbHelper = new MainDBBio (context);
}
public void open (){
Log.i(LOGTAG, "BANCO DE DADOS ABERTO");
db = dbHelper.getWritableDatabase();
}
public void close(){
Log.i(LOGTAG, "BANCO DE DADOS FECHADO");
dbHelper.close();
}
public Cidade inserir (Cidade cidade){
ContentValues valores = new ContentValues();
valores.put("nome", cidade.getNome());
valores.put("estado", cidade.getEstado());
cidade.setId(db.insert("cidade", null, valores ));
return cidade;
}
public void atualizar (Cidade cidade){
ContentValues valores = new ContentValues();
valores.put("nome", cidade.getNome());
valores.put("estado", cidade.getEstado());
db.update("cidade", valores, "_id = " + cidade.getId(), null );
}
public void deletar (Cidade cidade){
db.delete("cidade","_id = " + cidade.getId(),null);
}
public List<Cidade> buscar(){
String[] colunas = new String [] {"_id", "nome", "estado"};
Cursor cursor = db.query("cidade", colunas, null, null, null, null, "nome ASC");
Log.i(LOGTAG, "Entramos no Buscar");
return obterLista(cursor);
}
public List<Cidade> filtrar(String selecao, String ordenacao){
String[] colunas = new String[] {"_id", "nome"};
Cursor cursor = db.query("cidade", colunas, selecao , null, null, null , ordenacao);
return obterLista(cursor);
}
private List<Cidade> obterLista (Cursor cursor){
List<Cidade> listaCidade = new ArrayList<Cidade>();
if(cursor.getCount() > 0 ){
while (cursor.moveToNext() ) {
Cidade cidade = new Cidade();
cidade.setId(cursor.getLong(cursor.getColumnIndex("_id")));
cidade.setNome(cursor.getString(cursor.getColumnIndex("nome")));
cidade.setEstado(cursor.getString(cursor.getColumnIndex("estado")));
listaCidade.add(cidade);
}
}
return listaCidade;
}
}
Have you thought about doing a routine to check if the table was actually created in this bank? How do you know that the registered data is really going to the table you want to search for?
– Lollipop