Minha Lista some!

Se puderem me ajudar:
o metodo “listaEventos.size()” me retorna 200, que é o numero de objetos na lista.
Mas depois ao efetuar a função “toLast()” volto a executar o “listaEventos.size()” e ele me retorna 0…
pq a lista sumiu do mapa?

Código completo:

public class Principal extends AppCompatActivity {
List<Evento> listaEventos;
   
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_principal);      
    listaEventos = new ArrayList<Evento>();     
    readEventos();
    toLast();
} 

public void readEventos() {
    Ion.with(getBaseContext())
            .load(url_read)
            .asJsonArray()
            .setCallback(new FutureCallback<JsonArray>() {
                @Override
                public void onCompleted(Exception e, JsonArray result) {

                    for (int i = 0; i < result.size(); i++) {

                        JsonObject obj = result.get(i).getAsJsonObject();

                        Evento evento = new Evento();

                        evento.setId(obj.get("id").getAsInt());
                        evento.setUsername(obj.get("username").getAsString());
                        evento.setEquipamento(obj.get("equipamento").getAsString());
                        evento.setTurno(obj.get("turno").getAsString());
                        evento.setArea(obj.get("area").getAsString());
                        evento.setEvento_data(obj.get("evento_data").getAsString());
                        evento.setDescricao(obj.get("descricao").getAsString());
                        evento.setSituacao(obj.get("situacao").getAsInt());
                        evento.setNota(obj.get("nota").getAsInt());
                        evento.setHr_cria(obj.get("hr_cria").getAsString());
                        evento.setHr_ini(obj.get("hr_cria").getAsString());
                        evento.setHr_fim(obj.get("hr_cria").getAsString());


                        listaEventos.add(evento);
                    }
                    eventoAdapter.notifyDataSetChanged();
                    System.out.println("lista size "+listaEventos.size());
                }
            });
}
public void toLast() {
    if (listaEventos.size() > 0) {
        last = listaEventos.get(listaEventos.size() - 1);
        Evento atual = new Evento();
        atual.setId(last.getId());
        atual.setUsername(last.getUsername());
        atual.setEquipamento(last.getEquipamento());
        atual.setTurno(last.getTurno());
        atual.setArea(last.getArea());
        atual.setEvento_data(last.getEvento_data());
        atual.setDescricao(last.getDescricao());
        atual.setSituacao(last.getSituacao());
        atual.setNota(last.getNota());
        atual.setHr_cria(last.getHr_cria());
        atual.setHr_ini(last.getHr_ini());
        atual.setHr_fim(last.getHr_fim());
        exibeRegistro();
    } else {
        Toast.makeText(Principal.this, "Sem registros!", Toast.LENGTH_SHORT).show();
        System.out.println("lista size "+listaEventos.size());
    }
}

Isso acontece pq, provavelmente, esse Ion (não sei o que é) deve estar realizando uma requisição assíncrona. Isso faz com que o método readEventos seja executado e, antes de terminar a execução do callback e a lista seja populada, o método toLast já seja executado logo em seguida, mas com a lista vazia.

1 curtida

Era exatamente isto!

Obrigado!

Tem alguma maneira que eu possa esperar o retorno?

Chame o método toLast(); passando a lista gerada no callback executado em readEventos.

toLast(listaEventos);

obs.: Em vez de colocar a lista de eventos como atributo de classe, declare essa lista dentro do callback.

1 curtida