我有以下代码,希望每30秒循环一次.
MyLocation myLocation = new MyLocation();
public LocationResult locationResult = new LocationResult() {
@Override
public void gotLocation(final Location location) {
GeoPoint myGeoPoint = new GeoPoint(
(int) (location.getLatitude() * 1000000),(int) (location.getLongitude() * 1000000));
myMapController.animateTo(myGeoPoint);
myMapController.setZoom(10);
lat = location.getLatitude();
lon = location.getLongitude();
new OverlayTask().execute();
Timer timer;
timer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(),30000,30000);
}
};
一旦获得位置,就会被解雇,并且OverlayTask执行得很好,当分配给菜单项强制执行时,它也会执行.
但是在计时器内部,我得到一个错误.
public class MyTimerTask extends TimerTask {
public void run() {
try {
Log.i(">>>>>>>>>>>> Refresh: ","Success");
new OverlayTask().execute();
} catch (Exception e) {
Log.e(">>>>>>>>>>>> Error executing MyAsyncTask: ",e.getMessage(),e);
}
}
}
错误是…
Error executing MyAsyncTask:(2573): Only the original thread that created a view hierarchy can touch its views.
最佳答案
使用
runOnUiThread
方法:
public class MyTimerTask extends TimerTask {
public void run() {
runOnUIThread(new Runnable(){
public void run(){
try {
Log.i(">>>>>>>>>>>> Refresh: ","Success");
new OverlayTask().execute();
} catch (Exception e) {
Log.e(">>>>>>>>>>>> Error executing MyAsyncTask: ",e);
}
}
});
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。