Tela de Splash ao consumir um WebService (Netbeans)

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.