Ежевика HttpConnection Тайм-аут - PullRequest
       1

Ежевика HttpConnection Тайм-аут

1 голос
/ 06 августа 2011

Я пытаюсь получить файл XML для синтаксического анализа со следующим:

private void getAndParseXML( String _xmlurl ) {
        HttpConnection xmlcon = null;
        InputStream input     = null;
        SAXParserFactory spf  = null;

        try {
            xmlcon = (HttpConnection)Connector.open( _xmlurl, Connector.READ ); // open connection to XML source
            spf = SAXParserFactory.newInstance();                               // set up xml parsers
            input = xmlcon.openInputStream();                                   // set up input stream

            SAXParser saxparser = spf.newSAXParser();   // create a new parser object
            saxparser.parse( input, this );             // parse operations start here
        }
        catch( IOException ex ) {
            System.out.println( "IOException Caught:\t" + ex.getMessage() ); // set a default item if any exception occurs with retreiving or parsing XML file
        }
        catch (SAXException ex) {
            System.out.println( "SAXException Caught:\t" + ex.getMessage() );
            ex.printStackTrace();
        }
        catch ( IllegalArgumentException ex ) {
            System.out.println( "IllegalArgumentException Caught:\t" + ex.getMessage() );
            ex.printStackTrace();
        }
        catch (ParserConfigurationException ex) {
            System.out.println( "ParserConfigurationException Caught:\t" + ex.getMessage() );
            ex.printStackTrace();
        }
        finally {

            if ( input != null) {
                try {
                    input.close();  // attempt to close all connections

                }
                catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if ( xmlcon != null ) {
                try {
                    xmlcon.close();
                }
                catch ( IOException ex ) {
                    ex.printStackTrace();
                }
            }
        }
    } // END ----------------------------------------------------------------------------

Но выдается исключение, сообщающее, что время соединения истекло через 12 секунд.Это после выполнения строки input = xmlcon.openInputStream();.

Если это актуально, то перехватывается IOException, и перед вызовом этого метода выполняется определение наличия активного сетевого подключения.Я что-то пропустил?

РЕДАКТИРОВАТЬ: Просто для пояснения, это будет первый случай сетевого подключения в приложении.Перед этим блоком кода, простой тест:

private boolean isConnectedToNetwork() {

        boolean isConnected = false;

        if ( (TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_TCP_CELLULAR)) || (TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_TCP_WIFI)) )
            if ( (TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_TCP_CELLULAR)) || (TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_TCP_WIFI)) )
                isConnected = true;

        return isConnected;
    }

, чтобы убедиться, что соединение возможно, прежде чем пытаться получить файл XML.

Ответы [ 2 ]

1 голос
/ 12 августа 2011

Нашел проблему.В этом случае к URL-адресу _xmlurl необходимо добавить ";deviceside=true", чтобы обеспечить прямое соединение TCP / IP.Это гарантирует, что HttpConnection осуществляется через сотовую сеть.Другими словами, чтобы убедиться, что соединение не было установлено через Blackberry MDS.

Кроме того, была необходима проверка:

if ( (TransportInfo.isTransportTypeAvailable(TransportInfo.TRANSPORT_TCP_WIFI)) && (TransportInfo.hasSufficientCoverage(TransportInfo.TRANSPORT_TCP_WIFI)) )

антенна Wi-Fi была включена.Если приведенное выше значение равно true, к URL-адресу (снова _xmlurl) необходимо добавить еще ";interface=wifi", чтобы избежать сотовой сети, но все же открыть прямое соединение TCP / IP.

1 голос
/ 06 августа 2011

Майк, все выглядит хорошо.

Однако вот несколько идей для размышления:

  1. Можете ли вы открыть URL из браузера?
  2. Какой BB Transport вы используете для открытия соединения (например, возможно, оно не работает на BES, но будет работать нормально на Direct TCP или Wi-Fi)?
  3. К моменту этого вызова, чтобы код, который "определяет, существует ли активное сетевое соединение", закрыл все соединения, которые он мог открыть (если есть) во время обнаружения?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...