0

我正在为黑莓制作一个 Web 应用程序,我真的需要当前的 URL

在 的描述中documentUrl,它说

这个方法会返回这个 BrowserField 实例当前加载页面的 URL

我的代码是:

_bf2.requestContent("google.com";);
add(_bf2);
Global.c = _bf2.getDocumentUrl();
Global.be=new BasicEditField("URL: "+Global.c,Global.c);
add(Global.be);

奇怪的是 www.google.com 被加载到 BrowserField 并且 documentUrl 返回 null。

这是我当前的代码:

BrowserField _bf2 = new BrowserField();
MYBrowserFieldListener _listener = new MYBrowserFieldListener();
_bf2.requestContent("google.com";);
_bf2.addListener(_listener);
String url=_bf2.getDocumentUrl();
Global.be=new BasicEditField("URL: "+url,url);
add(Global.be);
add(_bf2); 

我把它改成

final BrowserField _bf2 = new BrowserField();
_bf2.requestContent("google.com";);
//_bf2.addListener(listener);
Global.be=new BasicEditField("URL: "+Global.c,Global.c);
add(Global.be);
add(_bf2);
_bf2.addListener(new BrowserFieldListener(){
    public void documentLoaded(BrowserField _bf2, Document document) throws Exception {
        Global.c=_bf2.getDocumentUrl();
    }
});

但它仍然返回 null。有人可以告诉我如何解决这个问题吗?提前致谢!

4

1 回答 1

1

我会说 Arhimed 已经回答了你的问题。HTTP 请求是一个非常耗时的过程(从 CPU 的角度来看)并且会阻塞直到服务器响应。我怀疑 RIM 程序员已经根据他们自己的建议编写了 requestContent() 方法,并在单独的线程上获取 Web 内容。因此, requestContent() 将立即返回,当您调用 getDocumentUrl() 时,它仍然为 null,因为此时 fetch 线程可能甚至还没有连接到服务器。

您将需要实现 BrowserFieldListener 并监听 documentLoaded()。

于 2012-12-22T23:47:10.057 回答