【问题标题】:j2me application doesn't work on Mobile Phonej2me 应用程序无法在手机上运行
【发布时间】:2009-08-25 10:08:30
【问题描述】:

我在 J2ME 中开发了一个简单的应用程序。应用程序只做简单的HttpConnection 并且只发出请求。这是代码:

 public void run() {
    System.out.println("Inside saveData");
    HttpConnection hc = null;
    OutputStream dout = null;
   try {
        System.out.println("custName = " + custName);
        System.out.println("prodName = " + prodName);
        System.out.println("qty = " + qty);

        hc = (HttpConnection) Connector.open("http://www.sufalamtech.com/demo/mobile/test.php?custName=" + custName + "&prodName=" + prodName + "&qty=" + qty);
        //hc = (HttpConnection) Connector.open("http://www.sufalamtech.com/demo/mobile/test.php?custName=Custtt51&prodName=Proddd52&qty=53");
        //hc = (HttpConnection) Connector.open("http://www.sufalamtech.com/demo/mobile/test.php?custName="+custName+"&prodName="+prodName+"&qty="+qty);

        hc.setRequestProperty("User-Agent", "Profile/MIDP-2.1 Configuration/CLDC-1.1");
        hc.setRequestMethod(HttpConnection.GET);
        dout = hc.openOutputStream();

    } catch (Exception e) {
        System.out.println("Error... = " + e);
    } finally {
        try {
            if (dout != null) {
                dout.close();
            }

            if (hc != null) {
                hc.close();
            }
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

这在 PC(模拟器)中运行良好。但是当我在诺基亚 5310 上部署 .jar 文件时,它不会从 HttpConnection 返回任何内容。

实际上我不想从 URL 接收任何数据。我只想向我的 URL 发送请求。否则只能通过该 URL 完成...我的应用程序在诺基亚 3110 Classic 中运行良好。但它不适用于诺基亚 5310。您有什么建议吗?

【问题讨论】:

    标签: java java-me midp


    【解决方案1】:

    问题在于,在某些实现中,您的应用程序甚至可能在您调用 connection.getResponseCode() 方法之前都不会发送请求。在打开 InputStream 或 OutputStream 之前尝试调用 getResponseCode() 方法

    【讨论】:

    • 你好,拉姆。我尝试调用 getResponseCode() 函数。但我的问题仍然是我无法在诺基亚 5310 中正确执行。但我在诺基亚 3110 Classic 中获得了完美的结果。如果您有任何解决方案,请建议...谢谢..
    • #1 也不要尝试覆盖 User-Agent 标头。因为已知某些设备在您设置 User-Agent 标头时会引发异常。尝试评论该行。 #2 当您发出 GET 请求时,您通常会打开 InputStream 而不是 OutputStream
    • 你好 Ram,谢谢你的回复..我已经做了两个改变,但仍然没有得到正确的输出..我不知道该怎么做......无论如何可以直接调试应用程序移动?
    • 也许您可以在捕获异常或在 finally 块中显示警报。适当地标记消息,以便您在警报出现时知道错误发生在哪里。您能否还解释一下,您期望在服务器端发生什么以及您在手机中使用什么数据计划。您是使用 wap 连接还是 gprs 连接来访问该 URL?
    • 我只想从用户那里发送 3 个参数作为 URLString,即产品名称、客户名称和数量。其余工作将由我的 test.php 文件完成。我正在使用 gprs 连接来点击 URL。
    【解决方案2】:

    您需要使用连接的输入流,而不是输出流。像这样的东西(未经测试)。

        if (hc.getResponseCode() == HttpConnection.HTTP_OK) {
            int length = (int)hc.getLength();
            InputStream is = hc.openInputStream();
            content = new byte[length];
            int read = 0;
            while (read < length) {
                int r = is.read(content, read, length - read);
                if (r < 0) {
                    break;
                }
                read += r;
            }
            is.close();
        }
        hc.close(); 
    

    【讨论】:

    • 其实我不想从 URL 接收任何数据。我只想向我的 URL 发送请求。否则只能通过该 URL 完成...我的应用程序在诺基亚 3110 Classic 中运行良好。但不能在诺基亚 5310 上工作。请问您有什么建议吗?
    • 您确定这不仅仅是权限问题?启动数据连接通常受到限制。每次连接时,我的手机都会询问我。
    • 是的,这不是权限问题。事实上,应用程序在诺基亚 3110 上完美运行.. 所以,它必须是其他问题.. 如果你有任何解决方案,请建议..
    【解决方案3】:

    我在诺基亚 E 系列 (E51) 上遇到了同样的问题,代码在 Sun Simulator 中运行良好,但是尝试在应用程序管理器中设置您的应用程序/MIDlets 默认访问点,这可能会解决您的问题。转到安装 -> 应用程序。管理器 -> 打开您的应用名称,更改查看 -> 为您的应用选择接入点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多