2
respostas

ArrayList

Tenho um arraylist que traz dados do banco para mim atualizando meu textview com perguntas já cadastradas, porem ele não está parando... ele fica num loop infinito sem dar erro.

public List<Carro> buscaPergunta() {
        List<Carro> carros = new ArrayList<>();
        Cursor c = dao.getReadableDatabase().rawQuery("SELECT carro_pergunta FROM Carro", null);
        while (c.moveToNext())
            carros.add(criaPerguntaCarro(c));
        c.close();
        return carros;
    }
 private void atualizaFormularioComPerguntaAtual() {
        CarroDAO dao = new CarroDAO(InspecaoActivity.this);
        List<Carro> carros = dao.buscaPergunta();
        if (indicePerguntaAtual < carros.size()) {
            perguntaAtual = carros.get(indicePerguntaAtual);

            campoPergunta = findViewById(R.id.pergunta);
            campoPergunta.setText(perguntaAtual.getPergunta());
        } else {
            Toast.makeText(InspecaoActivity.this, "Não há perguntas!", Toast.LENGTH_SHORT).show();
            finish();
        }
    }
private void botaoProximo() {
        proximaPergunta = findViewById(R.id.proximaPergunta);
        proximaPergunta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Carro carro = new Carro();

              if (!c.isChecked()&&!nc.isChecked()&&!na.isChecked()){
                  Toast.makeText(InspecaoActivity.this, "Preencha os campos corretamente", Toast.LENGTH_SHORT).show();
              }
                if(c.isChecked()){
                    carro.setResposta("Conforme");
                }else if(nc.isChecked()){
                    carro.setResposta("Não conforme");
                }else{
                    carro.setResposta("N/A");
                }
                carro.setPergunta(campoPergunta.getText().toString().trim());

                responde();
              CarroDAO dao = new CarroDAO(InspecaoActivity.this);
              dao.insereResposta(carro);
            }
        });
    }
2 respostas

Olá Rafaela,

O que exatamente acontece quando você roda o seu aplicatvo? O loop ao qual você se referiu que ele fica preso é o loop do buscaPergunta()?

Uma outra dúvida que fiquei foi onde você atualiza o indiceDaPerguntaAtual. Acredito que não esteja mesmo no código acima mas talvez ajude a identificar onde está o problema. Acredito que vamos precisar do restante do código pra tentar descobrir o que tá errado.

Ai está a classe onde está acontecendo tudo...

public class InspecaoActivity extends AppCompatActivity {

    private TextView nomeInsp, campoPergunta,campoId;
    private int indicePerguntaAtual = 0;
    private Button proximaPergunta;
    private Carro perguntaAtual;
    private RadioButton c,nc,na;
    private RadioGroup rg;

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

        setTitle("");

        carregaNomeDoCheckList();

        atualizaFormularioComPerguntaAtual();
        criarComponentes();

        botaoProximo();

    }

    private void criarComponentes() {
        nomeInsp = findViewById(R.id.nomeInsp);
        campoPergunta = findViewById(R.id.pergunta);
        proximaPergunta = findViewById(R.id.proximaPergunta);
        c = findViewById(R.id.conforme);
        nc = findViewById(R.id.nConforme);
        na = findViewById(R.id.nSeAplica);
        rg = findViewById(R.id.radioGroup);
    }


    private void carregaNomeDoCheckList() {
        if (nomeInsp!=null) {
            carregaNomeInspecao();
        }else{
            nomeInsp = findViewById(R.id.nomeInsp);
            nomeInsp.setText("Check List Carro");
        }
    }

    private void botaoProximo() {
        proximaPergunta = findViewById(R.id.proximaPergunta);
        proximaPergunta.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
              Carro carro = new Carro();
                RespostaCarro resposta = new RespostaCarro();

              if (!c.isChecked()&&!nc.isChecked()&&!na.isChecked()){
                  Toast.makeText(InspecaoActivity.this, "Preencha os campos corretamente", Toast.LENGTH_SHORT).show();
              }
                if(c.isChecked()){
                    resposta.setResposta("Conforme");
                }else if(nc.isChecked()){
                    resposta.setResposta("Não conforme");
                }else{
                    resposta.setResposta("N/A");
                }
                carro.setPergunta(campoPergunta.getText().toString().trim());
              responde();

            }
        });
    }

    public void responde() {
        indicePerguntaAtual++;
        atualizaFormularioComPerguntaAtual();
    }

    private void atualizaFormularioComPerguntaAtual() {
        CarroDAO dao = new CarroDAO(InspecaoActivity.this);
        List<Carro> carros = dao.buscaPergunta();
        if (indicePerguntaAtual < carros.size()) {
            perguntaAtual = carros.get(indicePerguntaAtual);
                campoPergunta = findViewById(R.id.pergunta);
                campoPergunta.setText(perguntaAtual.getPergunta());
        } else {
            Toast.makeText(InspecaoActivity.this, "Não há perguntas!", Toast.LENGTH_SHORT).show();
            finish();
        }
    }

    private void carregaNomeInspecao() {
        Intent intent = getIntent();
        Inspecao inspecao = (Inspecao) intent.getSerializableExtra("nome");
        nomeInsp = findViewById(R.id.nomeInsp);
        nomeInsp.setText(inspecao.getNome());
    }

}