Недопустимое исключение состояния при подключении к 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 еще.