【问题标题】:BlackBerry Connection Transport DescriptorsBlackBerry 连接传输描述符
【发布时间】:2012-08-27 16:32:29
【问题描述】:

我想知道是否有人可以为我指出这个问题的正确方向。一点介绍:

在我们维护的应用程序中,我们只是重写了网络层以移除对 OS 4 的支持。我们使用的是 OS 5 中提供的清洁器ConnectionFactory。请注意,我们遇到的问题仅限于设备,而不是模拟器相关。

应用有两种连接方式,一种是轮询特定 url 并存储数据的数据线程,另一种是“通用网络视图”(BrowserField)。

到目前为止,数据线程连接似乎没有问题,它根据传输类型正确构建 url 并正确下载数据。在BrowserField 我们有一个不同的问题。当我们使用 URL 打开BrowserField 时,有一条 OS 6 曲线会导致问题(但没有其他 OS 6 设备),它有可能会显示“无法选择正确的传输描述符”消息 - 最常见的罪魁祸首是 WAP2。

我想我们有点困惑,黑莓似乎没有像我们希望的那样处理传输描述符的选择。有人有什么建议吗?

由于篇幅较长,我已在 gist 上发布了我们的连接实用程序类:https://gist.github.com/3490101

数据线程使用的最常见的连接形式是 getUrlAsString(String etag) 函数,它执行 GET 并缓存基于 etag/url 的响应。

要为我们的BrowserField 构建 URL,我们使用 buildURLTransport(String url) 函数,它获取 url 上的连接,确定传输信息,并返回构建的 URL。

TL;DR:BrowserField 有一个奇怪的地方,我们似乎无法调试,我们希望有新的看法:我们认为上面发布的要点有问题在buildURLTransport(String url) 函数中。

提前致谢。

【问题讨论】:

    标签: blackberry


    【解决方案1】:

    小心您的代码,因为getUrlAsString 不是线程安全的。我不明白你为什么一直引用ConnectionFactory 有时你为什么不引用其他人。

    我也不明白你为什么需要方法buildUrlTransport。为什么不将BrowserFieldConfigConnectionFactory 一起用于BrowserField 作为here

    所以我会实例化一个ConnectionFactory,用你的特定参数配置它并在任何地方使用它。如果偏好发生变化,我将重新创建ConnectionFactory 并更新BrowserFieldConfig。当然这段代码应该是线程安全的。

    还要更加一致 - 有时您使用快速连接检查,有时您不使用。

    【讨论】:

    • 谢谢,我明天会检查这个并进行调整(届时将接受答案)。感谢您的清理建议!配置更改是指设备的连接性是否已更改?示例:如果 WiFi 变得不可用并切换到 MDS,是否需要一个新的连接工厂,或者持有的引用只是重试直到找到可用的传输?
    • 我看到您从设置中设置了首选传输。您可以设置它们的列表,例如 {WiFi、BIS-B、MDS、WAP2、DirectTCP}。在这种情况下,您不需要配置 ConnectionFactory 应该做的任何关于切换自身的工作。
    • 同意答案。但是,有时ConnectionFactory 传输类型选择无法按预期工作,尤其是在部分配置了 Wi-Fi 网络的情况下。
    • @MisterSmith 我还没有找到解决方案。我在考虑热点 API 或尝试先用一些短暂的超时时间打开连接。
    • @Eugen Martinov。我通常有一个首选传输类型的初始数组,但在建立连接之前,我会检查数组中的每个元素 (TransportInfo.isTransportTypeAvailable && TransportInfo.hasSufficientCoverage)。通过测试的元素被保存到第二个数组中,这是我在工厂中设置为实际首选传输类型的数组。如果工厂能为我做到这一点,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多