2

我正在使用此代码连接 Servlet。尝试访问互联网时的移动应用程序。

以下消息出现在手机中。

“允许网络访问??是或否”。如果我在诺基亚 6300 中单击该消息的“否”,则会出现“应用程序错误”警告,它会自动关闭应用程序。

我尝试了其他诺基亚手机,如 N70 和 N72。手机不会显示“应用程序错误”。

是手机问题还是编码问题?

有没有使用http连接Servlet的有效方法?

 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()诺基亚 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 回答