Неперехваченное исключение при использовании веб-службы в Blackberry

Приложение не отвечает при использовании службы покоя, если Интернет подключен, но просмотр не работает, в Blackberry jre 5.0. Пожалуйста, подскажите, есть ли способ установить время ответа?

Я использую этот код для потребления службы.

static HttpConnection con = null;
static InputStream is = null;
static StringBuffer rawResponse;

public static String Call(String url) throws IOException {
    try {
        url = url + getConnectionString() + ";";
        if (CheckConn()) {
            con = (HttpConnection) Connector.open(url, Connector.READ_WRITE, true);
            is = con.openInputStream();
            byte[] responseData = new byte[10000];
            int length = 0;
            rawResponse = new StringBuffer();
            while (-1 != (length = is.read(responseData))) {
                rawResponse.append(new String(responseData, 0, length));
            }
        } else {
            Status.show("Internet service is not avaiable.");
        }
    } catch (IOException ex) {
        Status.show("Internet is not responding");
    } finally {
        try {
            is.close();
            con.close();
        } catch (Exception e) {
            Status.show(e.getMessage());
        }
    }
    return rawResponse.toString();
}

public static String getConnectionString() {
    String connectionString = "";
    if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) {
        connectionString = ";interface=wifi";
    }
    else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_MDS) == CoverageInfo.COVERAGE_MDS) {
        connectionString = ";deviceside=false";
    } 
    else if ((CoverageInfo.getCoverageStatus() & CoverageInfo.COVERAGE_DIRECT) == CoverageInfo.COVERAGE_DIRECT) {
        String carrierUid = getCarrierBIBSUid();
        if (carrierUid == null) {
            connectionString = ";deviceside=true";
        } else {
            connectionString = ";deviceside=false;connectionUID=" + carrierUid + ";ConnectionType=mds-public";
        }
    } 
    else if (CoverageInfo.getCoverageStatus() == CoverageInfo.COVERAGE_NONE) {
        connectionString = ";None";
    }
    return connectionString;
}


public static String getCarrierBIBSUid() {
    net.rim.device.api.servicebook.ServiceRecord[] records = ServiceBook.getSB().getRecords();
    int currentRecord;
    for (currentRecord = 0; currentRecord < records.length; currentRecord++) {
        if (records[currentRecord].getCid().toLowerCase().equals("ippp")) {
            if (records[currentRecord].getName().toLowerCase().indexOf("bibs") >= 0) {
                return records[currentRecord].getUid();
            }
        }
    }
    return null;
}

person Farhan Ali    schedule 13.08.2012    source источник
comment
Да, я сделал, но столкнулся с той же проблемой.   -  person Farhan Ali    schedule 13.08.2012
comment
Вы можете получить доступ к Интернету в вашем браузере? запустите URL-адрес в своем браузере   -  person Signare    schedule 13.08.2012
comment
нет, я просто проверяю, работает ли интернет в браузере или нет   -  person Farhan Ali    schedule 13.08.2012
comment
Вы устанавливаете сетевое соединение в потоке событий? никогда не делай этого.   -  person rfsk2010    schedule 13.08.2012


Ответы (1)


используй это

 url = url + getConnectionString() + ";ConnectionTimeout=25000";

Здесь тайм-аут указывается в миллисекундах. Как только произойдет тайм-аут, его можно обработать в блоке catch.

person Shashank Agarwal    schedule 13.08.2012
comment
я все еще сталкиваюсь с той же проблемой - person Farhan Ali; 13.08.2012
comment
он не может обрабатываться в блоке catch после завершения приложения времени connectionTimeout и отображения сообщения Приложение Uncaught Exception завершено... - person Farhan Ali; 13.08.2012