O problema está no gerenciamento da Thread, que está errado. Use o Handler para este caso. A solução é mais ou menos como segue abaixo:
private Handler handler = new Handler();
public void progresso() {
dao = new DAO(this);
if (dao.isEmpty()) {
progressDialog = ProgressDialog.show(this, "",
"Salvando todas as frases...");
insert()
}
}
public void insert() { Runnable runnable = new Runnable() { @Override public void run() { try { dao.insert("uma string"); } catch (InterruptedException e) { e.printStackTrace(); } handler.post(new Runnable() { @Override public void run() { progressDialog.dismiss(); } }); } }; new Thread(runnable).start(); }
Em 21 de junho de 2012 17:20, Bruno Rafael Sant Ana <bruno.santana.ti@gmail.com> escreveu:
Nessa parte, dentro do método run, dentro do try eu faço um monte de inserts no banco, mas no código que postei coloquei apenas um exemplo de um dos inserts que eu faço:
public void run() {
try {
dao.insert("uma string"); //executo inserts aqui
} catch (Exception e) {
e.printStackTrace();
Por algum motivo parece não estar executando esses inserts dentro do try e lá em baixo quando uso o método nextInt passando uma lista vazia(já que o banco está vazio pois os inserts não foram executados) dá pau:
posicao = random.nextInt(listaFrases.size()); //dá pau pois a lista vinda de um select * do banco está vazia. Os inserts não foram inseridos. Aqui dá o erro Caused by: java.lang.IllegalArgumentException pq á lista está vazia.
Reitero que se eu tirar essas coisas de thread e ProgressDialog a lista é preenchida e não dá erro no nextInt. Mas vou ficar tentando aqui. Se eu conseguir eu posto a resposta. Se alguém quiser postar mais alguma observação eu agradeço.
Obrigado a todos que postaram.






0 comentários:
Postar um comentário