连接到BrowserField中的URL时出现非法状态异常

时间:2011-03-15 21:54:14

标签: blackberry

我写了一些代码来连接到BrowserField中的URL。在此过程中,它显示了非法国家例外。如果我单击继续,则连接。我不明白是什么问题。

以下是我正在使用的代码:

class MoreBrowserScreen extends MainScreen
{
    String email;
    public MoreBrowserScreen(String email)
    {
        this.email=email;
        setTitle(HeaderManager.tabsManager());
        HeaderManager.more.setFocus();
        TabsManager(Paths.HOME,Paths.ALERTS,Paths.COLL,Paths.APP,Paths.FMORE).getTabs();

        BrowserField myBrowserField = new BrowserField();
        add(myBrowserField);

        myBrowserField.requestContent(email);
    }
    protected void makeMenu(Menu menu, int instance)
    {
        MenuItemClass mic = new MenuItemClass();
        menu.add(mic.getExitItem(0, 0));
    }

2 个答案:

答案 0 :(得分:1)

嗨,我遇到了同样的问题,   首先你需要使用invokelater,因为你在事件线程中,并且由于一些神秘的原因也将焦点设置为浏览器,   这就解决了我的问题:

 private void buttonClicked() {
  UiApplication.getUiApplication().invokeLater(new Runnable() {         
    public void run() {      
        browser.setFocus();
        browser.requestContent("http://www.blackberry.com/developers" + ";deviceside=true");
    }
});

答案 1 :(得分:0)

我也一直在拉这个头发。我尝试了browser.setFocus(),它部分工作。然后我意识到还有另一个问题。某些网站执行自动重定向,导致BrowserField刷新并再次产生错误。 所以这里是一劳永逸地解决问题的解决方案。 首先将browserField声明为类成员。

private BrowserField browserField;

然后,当您实例化BrowserField时,请执行以下操作。

    browserField = new BrowserField();
    ProtocolController eventsProtocolController = new ProtocolController(browserField) {
        public void handleNavigationRequest(BrowserFieldRequest request) throws Exception {
            browserField.setFocus();
            super.handleNavigationRequest(request);
        }
    };
    browserField.getConfig().setProperty(BrowserFieldConfig.CONTROLLER, eventsProtocolController);

当屏幕上有其他字段可以“偷走”焦点时,似乎会出现此问题。因此,上面的代码将确保无论导航将强制焦点回到BrowserField。在我看来这是BrowserField的一个问题,但这是我的工作。

感叹!在测试之后似乎,这种解决方案仅适用于OS 6 ..但不适用于OS 5.我还没有找到任何OS 5的解决方案。