当我从主屏幕的构造函数运行我的方法时,它可以工作,但如果在计时器中调用,那么我会收到错误。
这是我的方法:
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上,我可能无法对UI进行更改?
答案 0 :(得分:1)
我认为你的预感是正确的,在黑莓手机中你不应该对Ui线程做任何工作。我想Timer线程因为它的行为而被终止,这就是你得到IllegalStateException的原因。可以找到UI线程的快速指南here。
尝试:
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);
注意:以上是未经测试的。