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…
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!
[quote=ricoldi]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[/quote]
Ainda não consegui botar isso pra funcionar. Dêem uma olhada no meu código:
[code] } 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!!!
[/code]
Como posso exibir a SplashScreen antes do loop e remove-la após result1 for alimentado?
[quote=dsavia][quote=ricoldi]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[/quote]
Ainda não consegui botar isso pra funcionar. Dêem uma olhada no meu código:
[code] } 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!!!
[/code]
Como posso exibir a SplashScreen antes do loop e remove-la após result1 for alimentado?
[/quote]
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…
[quote=ricoldi]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.
[/quote]
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!!!
[quote=dsavia][quote=ricoldi]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.
[/quote]
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!!![/quote]
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.