Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Formulario não traz alunoParaSerAlterado

  1. 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.

  1. 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;
    }


}
1 resposta
solução!

Achei o erro , chamei a Activity antes de passar o alunoParaSerAlterado

Aluno alunoParaSerAlterado = (Aluno) adapter.getItemAtPosition(posicao);

Antes:

Intent irParaoFormulario = new Intent(ListaAlunosActivity.this,FormularioActivity.class); startActivity(irParaoFormulario); irParaoFormulario.putExtra("alunoSelecionado", alunoParaSerAlterado);

Corrigido:

Intent irParaoFormulario = new Intent(ListaAlunosActivity.this,FormularioActivity.class); //Enviando pelo PutExtra irParaoFormulario.putExtra("alunoSelecionado", alunoParaSerAlterado); startActivity(irParaoFormulario);

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software