0

OS 5.0でプログラムを作りました。8520 カーブのエミュレーターでも、デバイスでも問題なく動作します。

今、私は 9900 でこのアプリケーションを 7.0 バージョンで使用しようとしていますHttpConnectionが、デバイスでスタックします。私のプログラム 5.0 バージョンを 9900 エミュレータで使用すると、問題なく動作します。2つのバージョンに違いはありますか? 接続を確立するために使用するコードをスレッドに入れています。この問題の答えがどこにあるのかわかりません。

try {
    mTimer = new Timer();
    mTimer.schedule(new CountDown(), 60000);
    UiApplication.getUiApplication().invokeLater(new Runnable() {
        public void run() {
            popup = new MyPopup("Cargando Incidentes...");
            UiApplication.getUiApplication().pushModalScreen(popup);
        }
    });

    conn = (HttpConnection) Connector.open(URL);

    InputStream contentIn = conn.openInputStream();
    byte[] data = new byte[400];
    int length = 0;
    StringBuffer raw = new StringBuffer();
    while (-1 != (length = contentIn.read(data))) {
        raw.append(new String(data, 0, length));
        str = raw.toString();
    }

    UiApplication.getUiApplication().invokeLater(new Runnable() {
        public void run() {
            try {
                conn.close();
                UiApplication.getUiApplication().invokeLater(new Runnable() {
                    public void run() {
                        try {
                            String datos[] = mainScreen.split(str, "ENDOFPAGE");
                            datos[0] = datos[0].substring(2, datos[0].length());
                            mainScreen.vecRegistro = mainScreen.split(datos[0],"$");
                            mainScreen.insertoEnBd();
                            mainScreen.insertoEnTablaDatosBD(_act);

                            UiApplication.getUiApplication().popScreen(popup);
                        } catch (Exception e) {
                            e.printStackTrace();
                            mainScreen.add(new RichTextField("Error ThreadIncidentes.run: "+ e.toString()));
                        }
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    return;
} catch (Exception e) {
}

private class CountDown extends TimerTask {
    public void run() {
        if (str.length() < 50){
            UiApplication.getUiApplication().invokeLater(new Runnable() {
                public void run() {
                    UiApplication.getUiApplication().popScreen(popup);
                    Dialog.alert("Error en la conexion");
                    System.exit(0);

                    clsThreadIncidentes.currentThread().interrupt();
                }
            });
            return;
        }
    }
}
4

1 に答える 1

2

使用しないでくださいConnection.open。これは接続を開く従来の方法であり、通常、BIS、MDS、Wi-Fi、または TCP ダイレクトのいずれを介して接続するかに応じて、サフィックスを処理するために多くのコードが必要になります。

5.0 以降では、新しい Networking API を使用できます。ここで参照するキー クラスはConnectionFactory.

于 2012-05-25T07:29:51.363 に答える