Não estou na máquina agora, mas vou postar os códigos:
Layout com caixa de texto e botão para gravar grupo
activity_grupos
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<EditText android:id="@+id/grupos" android:layout_width="fill_parent" android:layout_height="wrap_content" />
<Button android:id="@+id/btn_addGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Gravar" />
<ListView android:id="@+id/listView1" android:layout_width="fill_parent" android:layout_height="wrap_content" />
</LinearLayout>
Layout onde vou carregar a lista que vem do banco
modelo_lista.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<TextView android:id="@+id/tv1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Resultado Lista" />
<TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Resultado Lista" />
</LinearLayout>
Arquivo de conexão/criação do banco de dados (só estou usando o método de gravar o grupo, nele, ainda vou mudar os outros métodos)
ContextoDados.java
[code]package com.example.agenda;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteCursor;
import android.database.sqlite.SQLiteCursorDriver;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteQuery;
import android.util.Log;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class ContextoDados extends SQLiteOpenHelper {
private static final String campos[]={"Nome_Grupo","Cod_Grupo"};
// O nome do arquivo de base de dados no sistema de arquivos */
private static final String NOME_BD = "Agenda";
// A versão da base de dados que esta classe compreende. */
private static final int VERSAO_BD = 2;
private static final String LOG_TAG = "Agenda";
// Mantém rastreamento do contexto que nós podemos carregar SQL */
private final Context contexto;
public ContextoDados(Context context) {
super(context, NOME_BD, null, VERSAO_BD);
this.contexto = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
String[] sql = contexto.getString(R.string.ContextoDados_onCreate)
.split("\n");
db.beginTransaction();
try {
// Cria a tabela e testa os dados
ExecutarComandosSQL(db, sql);
db.setTransactionSuccessful();
} catch (SQLException e) {
Log.e("Erro ao criar as tabelas e testar os dados",e.toString());
} finally {
db.endTransaction();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(LOG_TAG, "Atualizando a base de dados da versao " + oldVersion
+ " para " + newVersion
+ ", que destruirá todos os dados antigos");
String[] sql = contexto.getString(R.string.ContextoDados_onUpgrade)
.split("\n");
db.beginTransaction();
try {
ExecutarComandosSQL(db, sql);
db.setTransactionSuccessful();
} catch (SQLException e) {
Log.e("Erro ao atualizar as tabelas e testar os dados",
e.toString());
throw e;
} finally {
db.endTransaction();
}
onCreate(db);
}
/**
* Executa todos os comandos SQL passados no vetor String[]
*
* @param db
* A base de dados onde os comandos serão executados
* @param sql
* Um vetor de comandos SQL a serem executados
*/
private void ExecutarComandosSQL(SQLiteDatabase db, String[] sql) {
for (String s : sql)
if (s.trim().length() > 0)
db.execSQL(s);
}
public String ConsultaGrupo() {
String dados= "";
SQLiteDatabase bd = getReadableDatabase();
Cursor c = bd.query("Grupos",
new String[] {"Nome_Grupo"},null, null, null, null, null);
/* if (c.getCount() > 0) {
c.moveToFirst();
dados = c.getString(2); */
/* if (c.getCount()>0){
dataSource = new SimpleCursorAdapter(this,R.layout.modelo_lista, c,campos,new int[]{R.id.tv1});
// dataSource = new SimpleCursorAdapter(this,R.layout.modelo_lista,c,new String[] {"Nome_Grupo"},new int[]{R.id.tv1});
listView.setAdapter(dataSource);
} else {
mensagem("Nome não cadastrado");
} */
return dados;
}
public long ExcluirContato(String nome) {
SQLiteDatabase db = getReadableDatabase();
try {
return db.delete("Contatos", "Nome='"+ nome + "'",null);
} finally {
db.close();
}
}
public long AtualizarContato(String nome, String telefone) {
SQLiteDatabase db = getReadableDatabase();
try {
ContentValues valores = new ContentValues();
valores.put("Telefone", telefone);
return db.update("Contatos", valores ,"Nome='" + nome + "'",null);
} finally {
db.close();
}
}
public long InserirGrupos(String nome) {
SQLiteDatabase db = getReadableDatabase();
try {
ContentValues initialValues = new ContentValues();
initialValues.put("Nome_Grupo", nome);
return db.insert("Grupos", null, initialValues);
} finally {
db.close();
}
}
public void mensagem(String msg) {
Toast t = Toast.makeText(this.contexto, msg, Toast.LENGTH_LONG);
t.show();
}
}
[/code]
Grupos.java
[code]package com.example.agenda;
import android.os.Bundle;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.SimpleCursorAdapter;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CursorAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
public class Grupos extends Activity implements OnClickListener{
private SQLiteDatabase db;
private CursorAdapter dataSource;
ContextoDados helper;
private static final String campos[]={“Nome_Grupo”,“Cod_Grupo”};
Button btnGroup;
EditText txtNome;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grupos);
listView = (ListView) findViewById(R.id.listView1);
txtNome = (EditText) findViewById(R.id.grupos);
btnGroup = (Button) findViewById(R.id.btn_addGroup);
btnGroup.setOnClickListener(this);
helper = new ContextoDados(this);
db = helper.getReadableDatabase();
}
public void onClick(View v){
// CadastrarGrupo();
listar();
}
public void CadastrarGrupo() {
ContextoDados db = new ContextoDados(this);
db.InserirGrupos(txtNome.getText().toString());
db.mensagem("Dados gravados") ;
}
public void listar(){
Cursor grupos = db.query("Grupos",campos,null,null,null,null,null);
if (grupos.getCount()>0){
dataSource = new SimpleCursorAdapter(this,R.layout.modelo_lista,grupos,campos,new int[]{R.id.tv1,R.id.tv2});
listView.setAdapter(dataSource);
}
}
public void limpaCampos(EditText txtnome){
txtnome.setText("");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_grupos, menu);
return true;
}
}[/code]
Quando chamo o método listar, ao clicar no botão, executa um erro fechando a aplicação. Não sei se entendi errado a parte de consultas, mas pelo que entendi:
através do db.query eu realizo uma consulta no Banco de Dados passando como parâmetro o nome da tabela, campos e alguma outra cláusula opcional
Depois disso, instancio um dataSource, onde ele vai associar esses dados a um modelo de listview que foi definido no arquivo modelo_lista, ou seja, os dados serão carregados no lugar das labels dessa tela.
depois seto a listView com os valores do banco.
Há algo errado na implementação? Não ocorre nenhum erro na hora de compilar, só executando mesmo.