Недопустимое исключение состояния при подключении к URL в BrowserField

Я написал некоторый код для подключения к URL-адресу в BrowserField. В процессе его показывает незаконное государственное исключение. Если я нажимаю "Продолжить", то он подключается. Я не понимаю, в чем проблема.

Вот код, который я использую:

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 ответа

Привет, у меня возникла та же проблема, сначала вам нужно использовать invokelater, потому что вы находитесь в потоке событий, и по какой-то таинственной причине также установите фокус на браузер, вот что решило мою проблему:

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

Я тоже тянул за это волосы. Я попробовал 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 еще.

Другие вопросы по тегам