诺基亚6300中出现应用程序错误

时间:2009-09-30 13:07:02

标签: java-me midp

我正在使用此代码连接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;
}

2 个答案:

答案 0 :(得分:2)

由于它是Series40手机,因此无法在诺基亚6300上提取java.lang.Throwable.printStackTrace()

权限对话框的问题与您的代码无关。您必须了解MIDP安全模型才能解决此问题。

手机制造商在给定手机的固件中编码了多个安全域。

在每个域中,可以有多个选项来限制对敏感API的访问。

当您安装MIDlet时,手机会根据您签署的证书信任谁来决定它所属的域。 (可能是未签名的,受信任的第三方,运营商,制造商......)

运行MIDlet时,每次尝试使用受限制的API时,都会应用相应的选项。 (可能总是拒绝,每次询问用户,只询问用户一次,总是允许)。

不同的受限API可以在同一个域中具有不同的选项。

因此,您的问题有几种可能的解释:

  • 您为6300和N70签署了不同的MIDlet。
  • 安全域在6300和n70上有所不同。
  • 限制HTTP连接的选项在6300和N70上有所不同。
  • 6300和N70上的移动网络运营商不同。

答案 1 :(得分:0)

我不确定它是否会有所帮助,但是在finally块中的HttpConnection之前尝试关闭输出流:

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

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

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