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

Inserção e recuperação do RatingBar Incorreto

Boa tarde! Terminei o curso de Android I, porém, percebi que o campo que a gente marca as quantidades de estrelas de cada pessoa, não grava nem recupera a quantidade marcada na inserção por exemplo. Mesmo editando a pessoa e alterando, ele altera mas não para a quantidade informada na edição.

Segue o xml

 <RatingBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:numStars="5"
            android:max="5"
            android:id="@+id/formulario_nota"/>

Teria como verificar como está isso no banco pra tentar descobrir o problema?

8 respostas

Oi Bruno, tudo bem ?

Cara mostra seu helper ai para gente !

A lógica dele está lá

Abraços

Boa tarde Matheus, obrigado pela atenção! Segue a helper...

package br.com.alura.agenda;

import android.widget.EditText;
import android.widget.RatingBar;

import br.com.alura.agenda.modelo.Aluno;

/**
 * Created by Metal on 15/02/2017.
 */

public class FormularioHelper {
    private Aluno aluno;

    private EditText campoNome;
    private EditText campoTelefone;
    private EditText campoEndereco;
    private EditText campoSite;
    private RatingBar campoNota;

    public FormularioHelper(FormularioActivity activity ) {
        this.campoNome = (EditText) activity.findViewById(R.id.formulario_nome);
        this.campoTelefone = (EditText) activity.findViewById(R.id.formulario_telefone);
        this.campoEndereco = (EditText) activity.findViewById(R.id.formulario_endereco);
        this.campoSite = (EditText) activity.findViewById(R.id.formulario_site);
        this.campoNota = (RatingBar) activity.findViewById(R.id.formulario_nota);

        this.aluno = new Aluno();

    }

    public Aluno pegaAluno(){

        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.getProgress()));

        return aluno;
    }

    public void preencheFormulario(Aluno aluno) {
        this.aluno = aluno;

        campoNome.setText(aluno.getNome());
        campoTelefone.setText(aluno.getTelefone());
        campoEndereco.setText(aluno.getEndereco());
        campoSite.setText(aluno.getSite());
        campoNota.setRating(aluno.getNota().floatValue());

    }
}
solução!

Na hora de pegar o valor :

 public Aluno pegaAluno(){

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

https://developer.android.com/reference/android/widget/RatingBar.html#getRating()

Olha fiz o seguinte e deu certo nos testes que realizei aqui:

 public Aluno pegaAluno(){

        aluno.setNome(campoNome.getText().toString());
        aluno.setTelefone(campoTelefone.getText().toString());
        aluno.setEndereco(campoEndereco.getText().toString());
        aluno.setSite(campoSite.getText().toString());
        aluno.setNota((double) campoNota.getRating());

        return aluno;
    }

Mas quero ver se compreendi direito. Quando se usa o método Double.valueOf, que espera uma string no argumento, ele tenta converter isso para um double? E por isso dava errado? Pois eu estava passando um float?

Na verdade o Double.valueOf consegue converter inteiros, floats e strings para double.

Abraços

Por que então não dava certo da forma que estava?

Pois você fazia dessa forma :

campoNota.getProgress()

E agora está fazendo :

campoNota.getRating()

**Editado Já achei o que errei, tinha errado no DAO.

public class FormularioHelper {

    private final EditText campoNome;
    private final EditText campoEndereco;
    private final EditText campoTelefone;
    private final EditText campoSite;
    private final RatingBar campoNota;

    private Aluno aluno;

    public FormularioHelper(FormularioActivity activity) {
        campoNome = (EditText) activity.findViewById(R.id.formulario_nome);
        campoEndereco = (EditText) activity.findViewById(R.id.formulario_endereco);
        campoTelefone = (EditText) activity.findViewById(R.id.formulario_telefone);
        campoSite = (EditText) activity.findViewById(R.id.formulario_site);
        campoNota = (RatingBar) activity.findViewById(R.id.formulario_nota);
        aluno = new Aluno();
    }

    public Aluno pegarAluno() {
        aluno.setNome(campoNome.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;
    }

    public void preecheFormulario(Aluno aluno) {
        campoNome.setText(aluno.getNome());
        campoEndereco.setText(aluno.getEndereco());
        campoTelefone.setText(aluno.getTelefone());
        campoSite.setText(aluno.getSite());
        campoNota.setProgress(aluno.getNota().intValue());
        this.aluno = aluno;
    }
}