Estou consumindo um webservice o qual leva entre 10-15 segundos para retornar a resposta. Como colocar uma tela de splash do momento que dou OK até o retorno chegar? Estou usando netbeans…
Tela de Splash ao consumir um WebService (Netbeans)
10 Respostas
Moleza cara!No momento em que o dispositivo estar ocioso vc resolve assim;
display.setCurrent(new SplashScreen());
:lol:
Não esquece de colocar em um thread paralelo essa chamada do OK. porque se você coloca ação nos commands da vida a interface fica travada durante o processamento.
Mas vocês já devem saber disso né?
Abraços
Ricoldi
Agora a explicação ficou de++ :lol:
Gosto de usar WaitScreen. Neste caso vc define na Task uma SimpleCancellableTask para que seu método execute() chame seu web service.
espero ter ajudado!
Não esquece de colocar em um thread paralelo essa chamada do OK. porque se você coloca ação nos commands da vida a interface fica travada durante o processamento.Mas vocês já devem saber disso né?
Abraços
Ricoldi
Ainda não consegui botar isso pra funcionar. Dêem uma olhada no meu código:
} else if (command == okCommand) { // OK que o usuario aperta quando coloca login e senha
result1 = "";
new LoginThread().start(); // aqui é a chamada do Webservice que retornará o objeto result1
// após validar o login e senha
do
{
}
while (result1 == ""); //fica em loop aguardando que result1 seja alimentada pela thread!
switchDisplayable(null, getSplashScreen()); // só aqui que a SplashScreen é exibida, mas aí já terminou a thread!!!
Como posso exibir a SplashScreen antes do loop e remove-la após result1 for alimentado?
Não esquece de colocar em um thread paralelo essa chamada do OK. porque se você coloca ação nos commands da vida a interface fica travada durante o processamento.Mas vocês já devem saber disso né?
Abraços
RicoldiAinda não consegui botar isso pra funcionar. Dêem uma olhada no meu código:
} else if (command == okCommand) { // OK que o usuario aperta quando coloca login e senha result1 = ""; new LoginThread().start(); // aqui é a chamada do Webservice que retornará o objeto result1 // após validar o login e senha do { } while (result1 == ""); //fica em loop aguardando que result1 seja alimentada pela thread! switchDisplayable(null, getSplashScreen()); // só aqui que a SplashScreen é exibida, mas aí já terminou a thread!!!Como posso exibir a SplashScreen antes do loop e remove-la após result1 for alimentado?
Existem várias abordagens.
A que vem mais na cabeça agora é: Pq catzu vc não colocar o swtichDisplayable dentro do código da Thread no final da mesma ? :shock:
Ela vai realizar a tarefa dela e em seguida exibir a tela. Não precisa nada deste do...while.
Se quiser usar o do...while, pode, mas é desperdício de processamento/bateria.A alternativa é usar wait e notify.
Colocar o SwitchDisplayable da SplasScreen no final da Thread? Mas eu quero que primeiro apareça o Splash e, enquanto estiver sendo exibida, a conexão seja feita para só depois exibir a próxima tela… se eu colocar no final da mesma, ele vai fazer toda a conexão pra só depois exibir a splash…!
Ou não entendi nada?
Sem entrar em detalhes, visto que tem N modos de fazer, que vão desde o melhor ao pior…
Ou eu ou você não entendemos o que o outro queria dizer, se seu intuito é fazer a tela SplashScreen ficar aparecendo enquanto executa a chamada do Webservice pode fazer assim:
} else if (command == okCommand) { // OK que o usuario aperta quando coloca login e senha
new Thread(){
public void run(){
comandoOk();
}
}.start();
}
private void comandoOk(){
switchDisplayable(null, getSplashScreen()); // só aqui que a SplashScreen é exibida, mas aí já terminou a thread!!!
new LoginThread().start(); // aqui é a chamada do Webservice que retornará o objeto result1
}
Como eu disse anteriormente não se pode travar a linha de excução de um comandAction assim como varias outras, pos são a linha de execução da kvm. Ou seja o processamento da maquina virtual fica travado esperando esse do{}while podre acabar de executar para ai poder voltar ao proprio serviço, como por exemplo chamar outra janela, ela não chama a janela de Splash porque esta perdendo tempo rodando seu do{}while. Por isso que sempre temos que liberar a thread principal o mais rapido possivel, como no exemplo que postei acima.
Espero que você e outros tenham entendido agora.
E vê melhor esse código ai, boa sorte…
Ou seja o processamento da maquina virtual fica travado esperando esse do{}while podre acabar de executar para ai poder voltar ao proprio serviço, como por exemplo chamar outra janela, ela não chama a janela de Splash porque esta perdendo tempo rodando seu do{}while. Por isso que sempre temos que liberar a thread principal o mais rapido possivel, como no exemplo que postei acima.
rsrs… “do while podre” foi engraçado :lol:
bom, fiz da seguinte maneira: quando o usuario clica no botão pra enviar os dados, a splashscreen é exibida por um tempo de 10 segundos (mais q suficiente pra enviar e receber os dados da webservice) e a thread é executada na sequência! Lá dentro da thread, após o término da mesma, mando chamar a próxima tela, e a splashscreen sai de exibição!
testei no cel e ficou perfeito, do jeito q eu queria!
muito obrigado a todos pela ajuda!!!
Ou seja o processamento da maquina virtual fica travado esperando esse do{}while podre acabar de executar para ai poder voltar ao proprio serviço, como por exemplo chamar outra janela, ela não chama a janela de Splash porque esta perdendo tempo rodando seu do{}while. Por isso que sempre temos que liberar a thread principal o mais rapido possivel, como no exemplo que postei acima.
rsrs… “do while podre” foi engraçado :lol:
bom, fiz da seguinte maneira: quando o usuario clica no botão pra enviar os dados, a splashscreen é exibida por um tempo de 10 segundos (mais q suficiente pra enviar e receber os dados da webservice) e a thread é executada na sequência! Lá dentro da thread, após o término da mesma, mando chamar a próxima tela, e a splashscreen sai de exibição!
testei no cel e ficou perfeito, do jeito q eu queria!
muito obrigado a todos pela ajuda!!!
Espero que tenha entendido ai qual o esquema das threads… e o lance que o boone falou sobre wait e notify de uma olhada, porque pode facilmente acontecer de a rede estar ruim e demorar mais do que imagina.