2

このコードを使用してサーブレットを接続しています。インターネットにアクセスしようとしたときのモバイル アプリケーション。

次のメッセージがモバイルに表示されます。

「ネットワーク アクセスを許可しますか?? はいまたはいいえ」. Nokia 6300 でそのメッセージに対して [いいえ] をクリックすると、[アプリケーション エラー] という警告が表示され、アプリケーションが自動的に閉じられます。

N70 や N72 などの他の nokia モバイルを試してみました。モバイルでは「アプリケーション エラー」は表示されません。

モバイルの問題ですか、それともコーディングの問題ですか?

httpを使用してサーブレットを接続する効率的な方法はありますか?

 public static InputStream getDataInputStream(String url, String request) 
 {
    HttpConnection httpConnectionObj = null;

    OutputStream dataOutputStreamObj = null;

    try {
        httpConnectionObj = (HttpConnection) Connector.open(url, Connector.READ_WRITE);

        httpConnectionObj.setRequestMethod(HttpConnection.POST);

        dataOutputStreamObj = httpConnectionObj.openOutputStream();

        dataOutputStreamObj.write(request.getBytes());

        dataOutputStreamObj.close();

        return httpConnectionObj.openInputStream();

    } catch (javax.microedition.io.ConnectionNotFoundException cnfe) {
      //Alert
    } catch (Exception ex) {
      //Alert
    } finally {
        try {
            if (httpConnectionObj != null) {
                httpConnectionObj.close();
                httpConnectionObj = null;
            }

        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }
    return null;
}
4

2 に答える 2

2

java.lang.Throwable.printStackTrace()Nokia 6300 は Series40 電話であるため、抽出する良い方法はありません。

アクセス許可ダイアログの問題は、コードとは関係ありません。これを修正するには、MIDP セキュリティ モデルに注意する必要があります。

特定の電話機には、電話機の製造元によってファームウェアにエンコードされた複数のセキュリティ ドメインがあります。

各ドメインには、機密性の高い API へのアクセスを制限するオプションがいくつかあります。

MIDlet をインストールすると、電話機は、署名に使用した証明書を誰が信頼しているかに基づいて、所属するドメインを決定します。(署名されていない、信頼できるサード パーティ、オペレーター、メーカーの可能性があります...)

MIDlet を実行すると、制限された API を使用しようとするたびに、対応するオプションが適用されます。(常に拒否する、毎回ユーザーに尋ねる、ユーザーに一度だけ尋ねる、常に許可する)。

異なる制限付き API は、同じドメイン内で異なるオプションを持つことができます。

したがって、問題にはいくつかの考えられる説明があります。

  • 6300 と N70 では MIDlet の署名が異なります。
  • 6300 と n70 ではセキュリティ ドメインが異なります。
  • HTTP 接続を制限するオプションは、6300 と N70 では異なります。
  • モバイル ネットワーク オペレータは、6300 と N70 では異なります。
于 2009-10-05T15:26:41.873 に答える
0

それが役立つかどうかはわかりませんが、finally ブロックで HttpConnection の前に出力ストリームを閉じてみてください。

    } finally {
        try {
            if (dataOutputStreamObj != null)
                dataOutputStreamObj.close();
            dataOutputStreamObj = null;

            if (httpConnectionObj != null)
                httpConnectionObj.close();
            httpConnectionObj = null;

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
于 2009-10-01T15:14:16.520 に答える