Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Duvida do .toString

Uma duvida sobre o toString, no Buscando Alunos, sobre escrevemos o método toString para usarmos no ArrayAdapter do ListaAlunos, como que o Java/Android trata o toString do ArrayAdapter para o toString do pegaAluno() no FormulárioHelp ?

Codigos para facilitar entendimento FormularioHelp

    public Aluno pegaAluno() {
        Aluno aluno = new Aluno();
        aluno.setNome(campoNome.getText().toString());
        aluno.setEmail(campoEmail.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota(Double.valueOf(campoNota.getProgress()));


        return aluno;
    }

no AlunoDao

    public void insere(Aluno aluno) {
        SQLiteDatabase db = getWritableDatabase();

        ContentValues dados = new ContentValues();
        dados.put("nome", aluno.getNome());
        dados.put("email", aluno.getEmail());
        dados.put("endereco", aluno.getEndereco());
        dados.put("telefone", aluno.getTelefone());
        dados.put("site", aluno.getSite());
        dados.put("nota", aluno.getNota());

        db.insert("Alunos", null, dados);

    }

    public List<Aluno> buscaAlunos() {
        String sql = "SELECT * FROM alunos;";
        SQLiteDatabase db = getReadableDatabase();
        Cursor c = db.rawQuery(sql, null);
        List<Aluno> alunos = new ArrayList<Aluno>();
        while(c.moveToNext()){
            Aluno aluno = new Aluno();
            aluno.setId(c.getLong(c.getColumnIndex("id")));
            aluno.setNome(c.getString(c.getColumnIndex("nome")));
            aluno.setEmail(c.getString(c.getColumnIndex("email")));
            aluno.setEndereco(c.getString(c.getColumnIndex("endereco")));
            aluno.setTelefone(c.getString(c.getColumnIndex("telefone")));
            aluno.setSite(c.getString(c.getColumnIndex("site")));
            aluno.setNota(c.getDouble(c.getColumnIndex("nota")));

            alunos.add(aluno);
        }
        c.close();
        return alunos;
    }
}

FormularioActivity

public class FormularioActivity extends AppCompatActivity {

    private FormularioHelper helper;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formulario);

        helper = new FormularioHelper(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_formulario, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            case R.id.menu_formulario_ok:
                Aluno aluno = helper.pegaAluno();
                AlunoDAO dao = new AlunoDAO(this);
                dao.insere(aluno);
                dao.close();

                Toast.makeText(FormularioActivity.this, "Aluno: " + aluno.getNome() + " salvo!", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }

        return super.onOptionsItemSelected(item);
    }
}

ListaTodosActivity

public class ListaAlunosActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lista_alunos);

        AlunoDAO dao = new AlunoDAO(this);
        List<Aluno> alunos = dao.buscaAlunos();
        dao.close();
        ListView listaAlunos = (ListView) findViewById(R.id.lista_alunos);
        ArrayAdapter<Aluno> adapter = new ArrayAdapter<Aluno>(this, android.R.layout.simple_list_item_1, alunos);
        listaAlunos.setAdapter(adapter);

        Button novoAluno = (Button) findViewById(R.id.novo_aluno);
        novoAluno.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intentVaiProFormulario = new Intent(ListaAlunosActivity.this, FormularioActivity.class);
                startActivity(intentVaiProFormulario);
            }
        });


    }
}
3 respostas

Opa Felipe.

Eu não sei bem se entendi a tua duvida, mas de toda forma, o toString não é especifico do Android, é um método da classe Object do Java, que é a superclasse de todos os objetos Java.

Nesse caso, o que ele faz é retornar uma representação textual em String do objeto em questão, e pode ser qualquer classe.

O retorno vai depender da implementação de cada objeto.

Se for você que tiver criando uma classe especifica, como a classe Aluno, você pode sobrescrever o método toString e fazer ele retornar o valor que você quiser, como:

@Override  // pra sobrescrever o método da superclasse
  public String toString() {
        return "O string que você quiser aqui!";
    }

Não sei se responde a tua duvida, mas espero que ajude.

Sim, você entendeu minha duvida. Então, na aula é falado que se não sobre escrevermos o método toString, ele vai exibir o padrão do objeto (que se n me engano, é a localização na memória, correto?). Por isso, queria saber como que o Java faz a diferenciação entre o toString utilizado no adapter e no

aluno.setEndereco(campoEndereco.getText().toString());
solução!

Ele diferencia, porque que escreceu as classes das views do Android teve o cuidado de sobrescrever os métodos toString dessas views para retornar algo que fosse conveniente pra as pessoas que estão desenvolvendo nessa plataforma.

Nesses casos a gente não precisa se preocupar muito com as implementações do mesmo porque já está pronta .