I have the following code that I want to be able to loop every 30 seconds.
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);
}
};
Gets fired once I have the location, and the OverlayTask executes fine, it also will execute when assigned to a menu item to force it.
However inside the timer I get an error.
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);
}
}
}
The error is....
开发者_运维问答Error executing MyAsyncTask:(2573): Only the original thread that created a view hierarchy can touch its views.
Use the runOnUiThread
method:
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.getMessage(), e);
}
}
});
}
}
精彩评论