Может ли ежевика HTTP-запрос об ошибке немедленно, если нет доступного соединения? - PullRequest
1 голос
/ 05 мая 2009

У меня есть HTTP-соединение, открытое

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

, где url является одним из:

Есть ли способ немедленно вызвать ошибку запроса, если не удается установить соединение, поскольку устройство не подключено к сети? Как таковой, время ожидания во многих случаях составляет около минуты (в частности, при первом вызове для получения информации из сети: c.getResponseCode())

Редактировать: я имею в виду ошибку. В одном случае, в частности, Wifi, он будет сидеть без дела несколько минут, если Wi-Fi не будет включен до истечения времени ожидания, и я хочу, чтобы он сразу же остановился.

Ответы [ 4 ]

6 голосов
/ 05 мая 2009

Я использую класс RadioInfo , чтобы проверить, есть ли соединение и включено ли радио, прежде чем пытаться установить соединение. Затем вы можете просто отобразить сообщение пользователю или включить радио (если оно выключено), прежде чем пытаться подключиться, что значительно улучшит взаимодействие с пользователем.

Попробуйте использовать:

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

Проверка состояния соединения перед подключением.

1 голос
/ 19 ноября 2009

Я помещаю свои сообщения в ветку, чтобы время ожидания истекло. Убедитесь, что ваш «PostThread» перехватывает все исключения (и сохраняет их).

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

Существует также параметр ConnectionTimeout, который я не проверял: например, socket://server:80/mywebservice;ConnectionTimeout=2000

0 голосов
/ 23 июня 2009

Было бы лучше иметь проверку тайм-аута из другого потока, потому что это произойдет, даже когда соединение установлено, скажем, задержка в сети очень высока, поэтому вы не хотите, чтобы пользователь ждал так долго или около того вещь.

Итак, в этом случае проверьте из другого потока, является ли текущее время минус время, введенное для установления соединения, больше установленного времени, закройте соединение с помощью connection.close ()!

0 голосов
/ 05 мая 2009

Не любым способом, который может быть задан программно. Это может раздражать, но соединение с мобильного устройства, особенно BlackBerry, обычно проходит через несколько различных сетей и шлюзов, прежде чем попасть на сервер назначения: wireless-> Carrier APN-> Internet-> BES (возможно) -> foo. сервер бар, поэтому большой тайм-аут встроен для учета потенциальных задержек в любой из этих точек.

Вы можете контролировать время ожидания соединения по умолчанию с вашего сервера BES / MDS (или в JDE, из файла MDS \ config \ rimpublic.property), но это, вероятно, вам не поможет.

...