0

我在这个网站上阅读了一些类似的帖子,这些帖子处理似乎是相同的问题,而回复似乎并没有真正为我澄清事情。

我的应用程序在模拟器中运行良好。我相信我在使用 OS 4.6 的 Bold 9000。该应用程序已签名。

我的应用程序通过 3G 进行 HTTP 调用以获取 XML 结果。类型是应用程序/xhtml+xml。在设备中,它没有给出错误。它没有视觉上的错误迹象。我告诉 try catch 将结果打印到屏幕上,但我什么也没得到。HttpConnection 直接从演示中取出并在 sim 中正常工作。

由于它没有给出错误,我开始回想我记得在项目开始时读过的东西。设备端=真?类似的东西?我的请求很简单 HttpConnection connection = (HttpConnection)Connector.open(url); 其中 url 只是一个标准 url,没有 get vars。根据我在屏幕角落看到连接箭头的时间,我假设该应用程序正在启动与我的服务器的初始通信,然后得到一个糟糕的结果,或者它得到了结果并且持久性存储无法正常运行预期的。

我不知道从哪里开始。发布代码会很荒谬,因为它基本上是我的整个应用程序。

我想我的问题是,是否有人知道设备与模拟器之间的任何重大差异可能导致 http 连接或持久性存储失败?构建设置?操作系统限制?在开始设备测试之前,我可能不知道每个人都应该做的任何标准程序?

谢谢

4

4 回答 4

3

仅仅提供 URL 是行不通的。您必须在 URL 后附加一些信息,以确定 HTTP 连接将使用的传输方法。例如http://example.com;deviceside=true将使用 DirectTCP(您可能还必须提供 APN 信息,但这些信息已保存在我手机的设备上)。 http://example.com;interface=wifi将使用 wi-fi。在 OS 5 上,有一个 ConnectionFactory 类使这变得更容易。 这是一个更详细的链接。

于 2010-06-09T12:08:40.440 回答
1

这对我来说是一个艰难的过程!正如乔纳森所说,您必须在 url 中放置一些参数才能使其在设备上运行。您不应该手动操作,而是使用 ConnectionFactory。

正如您可能认为的那样,这只会使它起作用,但事实并非如此!

真正的问题是url 没有被改变,因为它有 ;interface=wifi;deviceside=true (在我的例子中)。根据接受您请求的网络服务器,这可能会破坏代码。

我尝试过并且有效的解决方案是尝试发生一个假参数,例如

&foo=true -> &foo=true;deviceside=true

这将成为网络服务器的标准参数,但您的设备将使用它来驱动您的连接。

在模拟器上这项工作没有额外的代码,因为在它后面有一个 BIS 服务器供您使用。在设备上(如我的情况)没有,因为我使用的是未注册且没有 SIM 卡(只有 wifi)的开发设备。

另一点是 HttpConnection 类不处理 HTTP 302 重定向,如果你得到一个,你必须手动处理它。

于 2010-07-23T14:17:51.323 回答
0

我会对此发表评论,但我认为我还没有足够的代表......所以我会回答并希望这不会因为只是粘贴一些链接而受到影响。

上周我一直在我们的应用程序上解决这种确切的网络问题,正如其他一些人所指出的那样,这确实很棘手。这里有两个链接真正帮助我们在不同的设备上使用 HTTP,尤其是不提供 ConnectionFactory 的旧设备。

http://supportforums.blackberry.com/t5/Java-Development/Connecting-your-BlackBerry-http-and-socket-connections-to-the/td-p/206242

第一个有一些代码示例,包括查询系统的 ServiceBook 和 CoverageInfo 类以决定哪种连接将起作用的演示。

于 2010-06-11T17:56:09.997 回答
0

这可能是未指定 APN 的问题。有关详细信息,请参阅我对这个问题的回答: video streaming over http in blackberry

于 2010-06-10T00:07:40.010 回答