Pode um erro de solicitação HTTP BlackBerry imediatamente se não houver conexão disponível?

votos
1

Eu tenho uma conexão HTTP, aberto por

HttpConnection c = (HttpConnection)Connector.open(url);

em que urlé um dos seguintes:

  • http://foo.bar;deviceside=false
  • http://foo.bar;deviceside=false;ConnectionType=mds-public
  • http://foo.bar;deviceside=true;ConnectionUID=xxxxxxx
  • http://foo.bar;deviceside=true;interface=wifi

Existe alguma maneira de fazer com que o pedido ao erro imediatamente se a conexão não pode ser estabelecida porque o dispositivo não estiver conectado a uma rede? Como é, leva cerca de um minuto para o tempo limite em muitos casos (especificamente na primeira chamada para obter as informações da rede: c.getResponseCode())

Edit: eu quero dizer erro fora. Em um caso, Wifi, especificamente, vai sentar-se em torno de vários minutos se o wi-fi não é sobre antes do tempo limite, e eu quero que ele pare imediatamente.

Publicado 05/05/2009 em 16:03
fonte usuário
Em outras línguas...                            


4 respostas

votos
6

Eu uso o RadioInfo classe para verificar se há uma conexão e se o rádio está ligado antes de tentar fazer uma conexão. Então você pode apenas exibir uma mensagem para o usuário ou ligar o rádio (se é desligado) antes de tentar se conectar, contribui para uma melhor experiência do usuário.

Tente usar:

if (RadioInfo.getState() == RadioInfo.STATE_OFF)
OR
if (RadioInfo.getSignalLevel() == RadioInfo.LEVEL_NO_COVERAGE)

Para verificar o status da conexão antes de conectar.

Respondeu 05/05/2009 em 16:40
fonte usuário

votos
1

I encerrar meus posts em um segmento de tempo limite mais rápido. Verifique se o seu "PostThread" pega todas as exceções (e os salva).

public byte[] post(String url, byte[] requestString){
    PostThread thread=new PostThread(url, requestString);

    synchronized(thread){
        try{
            thread.start();
            thread.wait(TIMEOUT);
        }catch(Throwable e){

        }//method
    }//synch

    if (thread.isAlive()){
        try{
            thread.interrupt();
        }catch(Throwable e){

        }//method
        D.error("Timeout");
    }//endif

    if (thread.error!=null) D.error(thread.error);
    if (thread.output!=null) return thread.output;
    throw D.error("No output");
}//method

Há também o ConnectionTimeoutparâmetro, que eu não testei, por exemplo:socket://server:80/mywebservice;ConnectionTimeout=2000

Respondeu 19/11/2009 em 10:56
fonte usuário

votos
0

Seria melhor ter um cheque Timeout de um segmento diferente, porque isso vai acontecer mesmo quando a conexão é estabelecida, dizem que a latência da rede é muito alto, então u não quer que o usuário esperar por coisa tão longo ou tal.

Então, nesse caso, tem um cheque de um segmento diferente, se o tempo atual menos tempo introduzido para iniciar a conexão é mais do que o seu tempo de jogo, feche a Connection.Close conexão usando ()!

Respondeu 23/06/2009 em 18:33
fonte usuário

votos
0

Não qualquer forma que pode ser especificada por meio de programação. Ele pode ser irritante, mas uma conexão de um dispositivo móvel - especialmente um BlackBerry - geralmente passa por um diferentes redes e gateways poucos antes de chegar ao servidor de destino: Wireless-> Transportador APN-> Internet-> BES (talvez) -> foo. servidor bar para um grande tempo de espera é built-in para dar conta de possíveis atrasos em qualquer um desses pontos.

Você pode controlar dispositivo padrão tempo limite de conexão de seus BES / servidor MDS (ou no JDE, a partir da configuração do arquivo MDS \ \ rimpublic.property) - mas que provavelmente não vai ajudá-lo.

Respondeu 05/05/2009 em 16:28
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more