È possibile che un blackberry HTTP richieda immediatamente un errore se non è disponibile alcuna connessione?

StackOverflow https://stackoverflow.com/questions/825289

  •  05-07-2019
  •  | 
  •  

Domanda

Ho una connessione HTTP, aperta da

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

dove url è uno di:

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

Esiste un modo per causare immediatamente la richiesta di errore se la connessione non può essere stabilita perché il dispositivo non è connesso a una rete? Allo stato attuale, in molti casi ci vuole circa un minuto per il timeout (in particolare alla prima chiamata per ottenere le informazioni dalla rete: c.getResponseCode () )

Modifica: intendo errore fuori. In un caso, Wifi, in particolare, rimarrà in piedi per diversi minuti se il wifi non è attivo prima del timeout e voglio che si fermi immediatamente.

È stato utile?

Soluzione

Uso RadioInfo per verificare se esiste una connessione e se la radio è accesa prima di provare a stabilire una connessione. Quindi puoi semplicemente visualizzare un messaggio per l'utente o accendere la radio (se è spenta) prima di provare a connetterti, per un'esperienza utente molto migliore.

Prova a usare:

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

Per verificare lo stato della connessione prima della connessione.

Altri suggerimenti

Ricopro i miei post in una discussione per un timeout più veloce. Assicurati che il tuo " PostThread " cattura tutte le eccezioni (e le 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

Esiste anche il parametro ConnectionTimeout , che non ho testato: ad es. socket://server:80/mywebservice;ConnectionTimeout=2000

Non è possibile specificare in modo programmatico. Può essere irritante, ma una connessione da un dispositivo mobile - specialmente un BlackBerry - passa generalmente attraverso alcune reti e gateway diversi prima di raggiungere il server di destinazione: wireless- > Carrier APN- > Internet- > BES (forse) - > foo.bar server, quindi è incorporato un timeout di grandi dimensioni per tenere conto di potenziali ritardi in uno di questi punti.

Puoi controllare il timeout di connessione del dispositivo predefinito dal tuo server BES / MDS (o in JDE, dal file MDS \ config \ rimpublic.property) - ma probabilmente non ti aiuterà.

Sarebbe meglio avere un controllo di timeout da un thread diverso, poiché ciò accadrà anche quando viene stabilita la connessione, ad esempio la latenza della rete è molto alta, quindi non vuoi che l'utente aspetti così a lungo o così cosa.

Quindi, in tal caso, verifica da un thread diverso, se l'ora corrente meno l'ora immessa per l'avvio della connessione è superiore al tempo impostato, chiudi la connessione utilizzando connection.close ()!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top