黑莓 JDE HTTPConnection 问题

Posted

技术标签:

【中文标题】黑莓 JDE HTTPConnection 问题【英文标题】:Blackberry JDE HTTPConnection problems 【发布时间】:2009-09-02 19:53:56 【问题描述】:

所以,我正在使用 HTTPConnection 类,如下所示:

HttpConnection c = 
    (HttpConnection)Connector.open("http://147.117.66.165:8000/eggs.3gp");

在 Blackberry JDE API 中遵循看似正确的处理方式。

但是,如果我尝试对变量 'c' 执行任何操作,我的代码就会崩溃。

.getType()
.getInputStream()
.getStatus()

都会导致它崩溃。

不过,我可以从中获取 URL,而且我可以查看变量“c”本身,就知道它确实被创建了。

我是否设法创建了断开的连接?我是否需要做其他事情才能实际处理连接?什么情况下会出现这种情况(我知道链接不错,可以用黑莓的浏览器访问)。

我只是使用了 HttpConnection 错误吗?我该如何正确地做事?

【问题讨论】:

【参考方案1】:

当它崩溃时会抛出什么错误?您可能想尝试将“Connector.READ_WRITE”作为第二个参数添加到您的 open 调用中 - 即使它只是一个“只读”连接(如 GET),某些操作系统(如 4.6)将throw an exception 除非您以读取方式打开它/写模式。

【讨论】:

真的吗?我想我正在使用 4.6,但我现在没有看到任何异常...*思考* 为什么它甚至可以让您以一种永远无法正常工作的方式打开它?【参考方案2】:

通过找到一些使用 HttpConnection 的示例代码,我找出了问题所在(至少,我认为我做到了,至少,我现在可以访问所有这些变量)。以前,我从来没有将它转换为“流连接”(我看到的示例将它从连接器转换为 HTTPConnection)。

StreamConnection s = null;
s = (StreamConnection)Connector.open("http://10.252.9.15/eggs.3gp");
HttpConnection c = (HttpConnection)s;                        
InputStream i = c.openInputStream();
System.out.println("~~~~~I have a connection?~~~~~~" + c);
System.out.println("~~~~~I have a URL?~~~~" + c.getURL());
System.out.println("~~~~~I have a type?~~~~" + c.getType());
System.out.println("~~~~~I have a status?~~~~~~" + c.getResponseCode());
System.out.println("~~~~~I have a stream?~~~~~~" + i);
player = Manager.createPlayer(i, c.getType());

即使现在已成功创建流,但我在使用它时仍然遇到问题,但这可能是因为我的连接速度太慢了。

【讨论】:

我认为强制转换没有做任何事情——你甚至没有使用“s”变量,所以你还不如强制转换为 HttpConnection 并存储在“c”中。可能还有其他事情发生。如果您能向我们提供有关所引发异常的更多信息,那肯定会有所帮助。 之前,我收到“JUM 错误 104:未捕获的 NullPointer 异常”,但添加该演员表完全摆脱了它。我的代码声称已成功创建流,但它不会播放流。从调试消息来看,它认为它正在播放它,但我什么也没看到。【参考方案3】:

HttpConnection 的 API 文档建议第一次调用应该是c.getResponseCode(),试试吧。

【讨论】:

【参考方案4】:

你应该在我的博文“An HttpRequest and HttpResponse library for BB OS5+”中找到你需要的一切

对于在您的应用程序中调用媒体,您可以执行浏览器调用或直接从应用程序调用。您可能最好像这样使用浏览器:

BrowserSession invokeHighQuality = Browser.getDefaultSession(); 
invokeHighQuality.displayPage("URL goes here");

或者你可以试试这个:

// CHAPI invocation
            Invocation invoke = new Invocation(_data.getUrl(), null, BlackBerryContentHandler.ID_MEDIA_CONTENT_HANDLER, false,
                    null);
            try 
                Registry.getRegistry(YourAppClass.class.getName()).invoke(invoke);
             catch (Throwable t) 

            

【讨论】:

以上是关于黑莓 JDE HTTPConnection 问题的主要内容,如果未能解决你的问题,请参考以下文章

黑莓多线程问题

如何在黑莓中实现搜索功能?

黑莓手机使用方法

JDE WCF 服务

将 JDE 日期格式转换为 DB2

BlackBerry JDE 5 应用程序变慢