Como tratar falha de transmissão?

4 respostas
aprendiz_ce

Como devo proceder para tratar uma possivel falha de transmissão durante a troca de dados entre o meu aplicativo móvel e um Webservice? Exemplo: O usuário ativa a troca de dados utilizando 3G e no meio do processo a conexão atenua muito ou até mesmo chega a parar… Como contornar/tratar essa possivel situação?

Grato e aguardo qualquer orientação.

4 Respostas

fabriciov

creio que com um timeout, bem fácil fazer um com o CountDownTimer.

aprendiz_ce

Como faço isso? Será que o amigo teria um pequeno exemplo de como implementar essa solução?

Grato e aguardo retorno.

fabriciov

isWebServiceResponding é o um metodo para receber uma resposta de um webservice, com aqueles códigos de sempre (404,200, etc)

private String mUrl = "http://url"
private CountDownTimer mCountDown;
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable(){

    @Override
    public run(){
        if(isWebServiceResponding(mUrl)){
        if(mCountDown!= null){
        mCountDown.cancel();
        mCountDown = null;
        }
		 
      }else{
        if(mCountDown == null){
        mCountDown  = new  CountDownTimer(15000,15000){
               public void onTick (long millisUntilFinished) {
               }
               public void onFinish(){            
                    //TimeOutConcluido, fazer algo

               }			
            }
        }
     }
	 
	 if(mHandler!=null) mHandler.postDelayed(mRunnable, 1000);
}

private void startHandler(){
if(mHandler!=null) mHandler.post(mRunnable);
}


private boolean isWebServiceResponding(String url){

            WebClient client = WebClient.create(url);
            Response response = client.get();

            if (response.getStatus()==200) {
                 return true;
            } else {
                 return false;
            }
}
aprendiz_ce
fabriciov:
isWebServiceResponding é o um metodo para receber uma resposta de um webservice, com aqueles códigos de sempre (404,200, etc)
private String mUrl = "http://url"
private CountDownTimer mCountDown;
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable(){

    @Override
    public run(){
        if(isWebServiceResponding(mUrl)){
        if(mCountDown!= null){
        mCountDown.cancel();
        mCountDown = null;
        }
		 
      }else{
        if(mCountDown == null){
        mCountDown  = new  CountDownTimer(15000,15000){
               public void onTick (long millisUntilFinished) {
               }
               public void onFinish(){            
                    //TimeOutConcluido, fazer algo

               }			
            }
        }
     }
	 
	 if(mHandler!=null) mHandler.postDelayed(mRunnable, 1000);
}

private void startHandler(){
if(mHandler!=null) mHandler.post(mRunnable);
}


private boolean isWebServiceResponding(String url){

            WebClient client = WebClient.create(url);
            Response response = client.get();

            if (response.getStatus()==200) {
                 return true;
            } else {
                 return false;
            }
}

Entendido. Agora como esse exemplo fica bem mais claro para eu entender e tentar por a coisa em prática.

Muito obrigado pela sua atenção.

Criado 27 de março de 2013
Ultima resposta 7 de abr. de 2013
Respostas 4
Participantes 2