在Browserfield Blackberry中加载handleNavigationRequest内的屏幕

在Browserfield Blackberry中加载handleNavigationRequest内的屏幕,blackberry,loading,browserfield,Blackberry,Loading,Browserfield,在我的应用程序中,我使用BrowserField显示一个网站。当网站内的每个链接被选中时,我需要显示加载屏幕,这样用户就不会感到空白 我能够在这个方法中添加加载屏幕 public void documentCreated(BrowserField browserField, ScriptEngine scriptEngine, Document document) 但问题是只有在建立连接时,才会调用此方法,因此在显示加载屏幕之前会有延迟

在我的应用程序中,我使用BrowserField显示一个网站。当网站内的每个链接被选中时,我需要显示加载屏幕,这样用户就不会感到空白

我能够在这个方法中添加加载屏幕

public void documentCreated(BrowserField browserField,
                            ScriptEngine scriptEngine, Document document)
但问题是只有在建立连接时,才会调用此方法,因此在显示加载屏幕之前会有延迟

因此,我尝试实现ProtocolController并在该方法中添加加载屏幕

public void handleNavigationRequest(BrowserFieldRequest request)
但是,加载屏幕仍然会在一个小延迟后显示(与在documentCreated方法下相同)

这是我的代码片段

public void handleNavigationRequest(BrowserFieldRequest request)
            throws Exception {

        if (!NetworkUtil.isNetworkAvailable()) {
            Dialog.inform(Strings.NETWORK_ERROR);
        } else {

            UiApplication.getUiApplication().invokeAndWait(new Runnable() {
                 public void run() {
                     BaseScreen.showLoadingProgress(Strings.LOADING);
                 }
             });

            InputConnection ic = handleResourceRequest(request);
            browserField.displayContent(ic, request.getURL());
        }
    }
我也在线外尝试了这个……仍然发生着同样的事情。为了进行测试,我在这个方法中添加了一个对话框,它是在我点击网站内任何链接的同时出现的。只有此加载屏幕需要时间加载

有什么办法可以做到这一点吗

此外,与本机浏览器相比,浏览器字段加载网站的时间稍长

我是不是错过了什么!请帮忙

我已经按照你的建议尝试了文档卸载方法。但它并没有被触发。下面给出的是代码片段,请您检查我在这里做错了什么

protected void onUiEngineAttached(boolean attached) {
        if (attached) {

            BaseScreen.showLoadingProgress(Strings.LOADING);

        }
        super.onUiEngineAttached(attached);
    }

try {
                listener = new BrowserFieldListener() {

                    // Page starts loading...
                    public void documentCreated(BrowserField browserField,
                            ScriptEngine scriptEngine, Document document)
                             {

                        // show the loading screen
                        //showLoadingProgress(Strings.LOADING);
                    }

                    public void documentError(BrowserField browserField,
                            Document document)  {
                        hideLoadingProgress();
                        Dialog.inform(Strings.NETWORK_ERROR);
                    }

                    public void documentAborted(BrowserField browserField,
                            Document document) { 
                        hideLoadingProgress();
                        Dialog.inform(Strings.NETWORK_ERROR);
                    }

                    public void documentUnloading(BrowserField browserField,
                            Document document) {

                        BaseScreen.showLoadingProgress(Strings.LOADING);
                    }

                    // Page loaded
                    public void documentLoaded(BrowserField browserField,
                            Document document) {

                        // the document has loaded, hide loading popup ...
                        BaseScreen.hideLoadingProgress();
                    }

                };
            } catch (Exception ex) {
                Dialog.inform(Strings.NETWORK_ERROR);
            }

browserField.addListener(listener);
            // add the browser field to a ui manager or screen
            add(browserField);

            // request the content
            browserField.requestContent(URL);

我使用BrowserFieldListener来实现这一点(请参阅)。这有点违反直觉,但我在DocumentUnload()中显示加载屏幕,并在documentLoaded()中将其删除。当我第一次填充BrowserField时,我还按下加载屏幕,当带有BrowserField的屏幕关闭时,我确保加载屏幕也弹出。这不是一个很好的解决方案,但对我来说很有效

是的,一般来说,BrowserField比Browser慢。我还没有找到解决办法。然而,一个重要的方面是缓存。查找有关为BrowserField创建自己的缓存的信息-这里有一个线程,BB网站上有一篇KB文章。对不起,找不到自动取款机,我会在找到时更新

更新

正如OP所发现的,缓存文章是

进一步更新

我想澄清两件事:

  • 必须使用addListener方法将侦听器与BrowserField关联
  • 假设您对BrowserField的初始加载执行通常的requestContent(),您将需要自己推动加载屏幕,因为监听器中将调用的第一个方法(当然假设它已经工作)将是documentLoaded() 此处包含演示如何使用侦听器的示例:

    谢谢彼得。。。!!我在BrowserFieldListener中尝试了documentCreated方法,这会在加载屏幕等待建立连接时造成一些延迟。我将按照您的建议尝试卸载文档。我也在本文之后实现了缓存,但在加载过程中仍然没有获得太多的性能提升。我希望这是你提到的那篇文章。我也试过了。但这一事件并没有被触发。我已经更新了我的问题,以包括我用于该问题的代码片段。你能检查一下吗!!用这个部分更新了问题。。!!我经历过,也尝试过这个。添加了这个并调试了代码;但是documentUnloading()方法不会用到它。但是documentCreated()和documentLoaded()方法被触发。。。我很困惑…:-(你知道为什么会这样吗?