При получении метода от Timer я получаю незаконное исключение состояния - PullRequest
0 голосов
/ 16 января 2012

Когда я запускаю свой метод из конструктора главного экрана, он работает, но если он вызывается в таймере, я получаю ошибку.

Вот мой метод:

public void buildDesc(){


    try {


        JSONObject event = array.getJSONObject(currentPage);
        String title = event.getString("title");

        String by = event.getString("by");
        String by_name = event.getString("by_name");
        String summary = event.getString("summary");
        int nid = event.getInt("nid");


    vfm.add(new LabelField(title));
        System.out.println("The Title:"+title);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

Итаймер:

timer = new Timer();//Create the timer to loop the events every 5 seconds
        timer.scheduleAtFixedRate(new TimerTask(){
            public void run() {
                currentPage++;
                if(currentPage > 3){
                    currentPage = 0;    
                }
                System.out.println("Page Position:"+pagePosition(currentPage+1));
                gallery.setHorizontalScroll(pagePosition(currentPage));

                buildDesc();

            }
        }, 0, 10000);

Я прочитал вопрос Android, который говорит, что, возможно, я не могу вносить изменения в пользовательский интерфейс, если не на UIThread?

1 Ответ

1 голос
/ 16 января 2012

Я думаю, что ваша догадка верна, в BlackBerry вы не должны выполнять какую-либо работу в потоке пользовательского интерфейса.Я предполагаю, что поток Timer прерывается из-за его поведения, поэтому вы получаете исключение IllegalStateException.Краткое руководство по теме пользовательского интерфейса можно найти здесь .

Попробуйте:

timer = new Timer();//Create the timer to loop the events every 5 seconds
timer.scheduleAtFixedRate(new TimerTask(){
    public void run() {
        currentPage++;
        if(currentPage > 3){
            currentPage = 0;    
        }
        System.out.println("Page Position:"+pagePosition(currentPage+1));

        synchronized(UiApplication.getUiApplication().getEventLock())) {  
            // UI Code here
            gallery.setHorizontalScroll(pagePosition(currentPage));

        buildDesc();
        } 
    }
}, 0, 10000);

Примечание. Выше не проверено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...