- Estou clicando na lista para poder altera os dados do Aluno, a Activity formulario não carrega os valores, sempre aparece alunoParaSAralterado como null e o formulario vem vazio.
final FormularioHelper helper=new FormularioHelper(this);
final Aluno alunoParaSerAlterado = (Aluno)getIntent().getSerializableExtra("alunoSelecionado");
if (alunoParaSerAlterado!=null){ helper.colocaAlunoNoFormulario(alunoParaSerAlterado); }
Fui passa a passo e não consigo visualizar o erro.
- Aproveitando o espaço, tem algum curso que ensina a Debugar , marcar os Breakpoints e ir passando passo a passo?
Código
package br.com.caelum.cadastro;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import br.com.caelum.cadastro.dao.AlunoDAO;
import br.com.caelum.cadastro.modelo.Aluno;
public class ListaAlunosActivity extends Activity{
private ListView listViewAlunos;
private Aluno aluno;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.listagem_alunos);
//fazendo a ponte entre XML e Java, e o devido Cast
listViewAlunos= (ListView) findViewById(R.id.lista);
registerForContextMenu(listViewAlunos);
Toast.makeText(ListaAlunosActivity.this,"Iniciou o aplicativo", Toast.LENGTH_LONG).show();
listViewAlunos.setOnItemClickListener( new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> adapter, View view, int posicao, long id) {
Intent irParaoFormulario = new Intent(ListaAlunosActivity.this,FormularioActivity.class);
startActivity(irParaoFormulario);
Aluno alunoParaSerAlterado = (Aluno) adapter.getItemAtPosition(posicao);
Toast.makeText(ListaAlunosActivity.this, "Aluno clicado: "+alunoParaSerAlterado.getNome(), Toast.LENGTH_SHORT).show();
irParaoFormulario.putExtra("alunoSelecionado", alunoParaSerAlterado);
}
});
listViewAlunos.setOnItemLongClickListener(new OnItemLongClickListener()
{
@Override
public boolean onItemLongClick(AdapterView<?> adapter, View view, int posicao, long id)
{
// TODO Auto-generated method stub
//Toast.makeText(ListaAlunosActivity.this, "Aluno clicado: "+alunos[posicao], Toast.LENGTH_SHORT).show();
Toast.makeText(ListaAlunosActivity.this,
"Nome clicado com toque mais longo: "
+ adapter.getItemAtPosition(posicao),
Toast.LENGTH_LONG).show();
aluno = (Aluno) adapter.getItemAtPosition(posicao);
return false;
}
});
} // onCreate
private void carregaLista(){
AlunoDAO alunoDAO = new AlunoDAO(this);
//pegar alunos do banco ou seja do DAO
//getLista() tem um retorno do tipo List<Aluno> então temos que criar a variável desse tipo para receber o retorno
List<Aluno> listAlunos=alunoDAO.getLista();
if (listAlunos.isEmpty())
Toast.makeText(ListaAlunosActivity.this,"Nenhum aluno cadastrado", Toast.LENGTH_LONG).show();
//Criando o adpter para passar o array do Java para android
ArrayAdapter<Aluno> adapter =
new ArrayAdapter<Aluno>(this,android.R.layout.simple_list_item_1, listAlunos);
// Associar o adpter criado para o LIstView
listViewAlunos.setAdapter(adapter);
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
this.carregaLista();
}
//Importando Menu XML
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_lista_alunos, menu);
return super.onCreateOptionsMenu(menu);
}
//Comportamento ao clicalr
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId())
{
case R.id.novo:
// Intenção
//Toast.makeText(ListaAlunosActivity.this,
// "Voce clicou no novoAluno", Toast.LENGTH_LONG).show();
//return false;
Intent irParaFormulario = new Intent(this,FormularioActivity.class);
//Intent irParaFormulario = new Intent(this,DouglasActivity.class);
startActivity(irParaFormulario);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
// Menu suspenso
@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
// criando menu programaticamente
// Não esquecer de registrar a lista para ter um menu de contexto
menu.add("Ligar");
menu.add("Enviar SMS");
menu.add("Achar no Mapa");
menu.add("Navegar no site");
MenuItem deletar = menu.add("Deletar");
deletar.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
AlunoDAO dao = new AlunoDAO(ListaAlunosActivity.this);
dao.deletar(aluno);
dao.close();
carregaLista();
return false;
}
});
menu.add("Enviar E-mail");
super.onCreateContextMenu(menu, v, menuInfo);
}
}
public class FormularioActivity extends Activity{
//Vamos criar o FormularioHelper para facilitar o trabalho de extrair os dados do Aluno dos campos.
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.formulario);
final FormularioHelper helper=new FormularioHelper(this);
final Aluno alunoParaSerAlterado = (Aluno)getIntent().getSerializableExtra("alunoSelecionado");
if (alunoParaSerAlterado!=null){
helper.colocaAlunoNoFormulario(alunoParaSerAlterado);
}
Toast.makeText(this, "Aluno: "+alunoParaSerAlterado,Toast.LENGTH_SHORT).show();
final Button btInserir = (Button) findViewById(R.id.botao);
btInserir.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// pegaAlunoDoFormulario() return
Aluno aluno=helper.pegaAlunoDoFormulario();
AlunoDAO alunoDAO = new AlunoDAO(FormularioActivity.this);
if(alunoParaSerAlterado !=null){
aluno.setId(alunoParaSerAlterado.getId());
btInserir.setText("Alterar");
alunoDAO.atualizar(aluno);
}
else{
alunoDAO.insere(aluno);
}
alunoDAO.close();
Toast.makeText(FormularioActivity.this, "Objeto aluno criado",Toast.LENGTH_SHORT).show();
finish();
}
});//Onclick
}
}
public class FormularioHelper {
private EditText campoNome;
private EditText campoEndereco;
private EditText campoSite;
private EditText campoTelefone;
private RatingBar campoNota;
private ImageView campoFoto;
private Aluno aluno;
//OnCreate, poderia fazer em outro método qualquer
public FormularioHelper(FormularioActivity active)
{
aluno=new Aluno();
// Fazendo a "ponte" entre o Java e android
campoNome = (EditText) active.findViewById(R.id.nome);
campoEndereco = (EditText) active.findViewById(R.id.endereco);
campoSite = (EditText) active.findViewById(R.id.site);
campoTelefone = (EditText) active.findViewById(R.id.telefone);
campoNota = (RatingBar) active.findViewById(R.id.nota);
campoFoto = (ImageView) active.findViewById(R.id.foto);
}
public Aluno pegaAlunoDoFormulario(){
aluno.setNome(campoNome.getText().toString());
aluno.setTelefone(campoTelefone.getText().toString());
aluno.setEndereco(campoEndereco.getText().toString());
aluno.setSite(campoSite.getText().toString());
aluno.setNota(Double.valueOf(campoNota.getRating()));
return aluno;
}
public void colocaAlunoNoFormulario(Aluno alunoParaSerAlterado) {
campoNome.setText(alunoParaSerAlterado.getNome());
campoSite.setText(alunoParaSerAlterado.getSite());
campoEndereco.setText(alunoParaSerAlterado.getEndereco());
campoNota.setRating(alunoParaSerAlterado.getNota().floatValue());
campoTelefone.setText(alunoParaSerAlterado.getTelefone());
}
}
public class AlunoDAO extends SQLiteOpenHelper {
private static final String DATABASE = "NomeDoBanco";
private static final int VERSAO = 5;
private static final String TABELA="Alunos";
public AlunoDAO(Context ctx) {
super(ctx, DATABASE, null, VERSAO);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
String sql ="CREATE TABLE " + TABELA +
" (id INTEGER PRIMARY KEY , "
+ " nome TEXT UNIQUE NOT NULL, "
+ " telefone TEXT, "
+ " endereco TEXT, "
+ " site TEXT, "
+ " nota REAL, "
+ "caminhoFoto TEXT "
+ ");";
db.execSQL(sql);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
String sql ="DROP TABLE IF EXISTS "+ TABELA;
db.execSQL(sql);
onCreate(db);
}
public void insere(Aluno aluno) {
ContentValues cv = new ContentValues();
// nome da coluna
//cv.put("id", aluno.getId());
cv.put("nome", aluno.getNome());
cv.put("telefone", aluno.getTelefone());
cv.put("endereco", aluno.getEndereco());
cv.put("site", aluno.getSite());
cv.put("nota", aluno.getNota());
cv.put("caminhofoto", aluno.getCaminhoFoto());
// Não esta recebendo o database para poder manipular
getWritableDatabase().insert(TABELA, null, cv);
}
public List<Aluno> getLista() {
List<Aluno> listaDeAlunos = new ArrayList<Aluno>();
String sql ="Select * from " + TABELA + ";";
//
Cursor c = getReadableDatabase().rawQuery(sql, null);
if(null != c)
if(c.getCount() > 0)
{
while(c.moveToNext())
{
Aluno aluno = new Aluno();
aluno.setId(c.getLong(c.getColumnIndex("id")));
aluno.setNome(c.getString(c.getColumnIndex("nome")));
aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
aluno.setSite(c.getString(c.getColumnIndex("site")));
aluno.setNota(c.getDouble(c.getColumnIndex("nota")));
aluno.setCaminhoFoto(c.getString(c.getColumnIndex("caminhoFoto")));
listaDeAlunos.add(aluno);
}
}
return listaDeAlunos;
}
public void deletar(Aluno aluno) {
String[] args={aluno.getId().toString()};
getWritableDatabase().delete("Alunos", "id=?", args);
}
public void atualizar(Aluno aluno) {
ContentValues cv = new ContentValues();
// nome da coluna
//cv.put("id", aluno.getId());
cv.put("nome", aluno.getNome());
cv.put("telefone", aluno.getTelefone());
cv.put("endereco", aluno.getEndereco());
cv.put("site", aluno.getSite());
cv.put("nota", aluno.getNota());
cv.put("caminhofoto", aluno.getCaminhoFoto());
String[]args ={aluno.getId().toString()};
getWritableDatabase().update("Alunos", cv, "id=?",args);
}
}
public class Aluno implements Serializable {
private Long id;
private String nome;
private String telefone;
private String endereco;
private String site;
private String caminhoFoto;
private Double nota;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getTelefone() {
return telefone;
}
public void setTelefone(String telefone) {
this.telefone = telefone;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Double getNota() {
return nota;
}
public void setNota(Double nota) {
this.nota = nota;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public String getSite() {
return site;
}
public void setSite(String site) {
this.site = site;
}
public String getCaminhoFoto() {
return caminhoFoto;
}
public void setCaminhoFoto(String caminhoFoto) {
this.caminhoFoto = caminhoFoto;
}
@Override
public String toString() {
return id + "." + nome;
}
}