Все, что вам нужно сделать, это:
- изменить класс FindLocation, расширив asynctask
- изменить startLocation для переопределения doInBackground.
Тогдавызовите метод execute вашей асинхронной задачи вместо startLocation.
Кроме того, в вашем случае асинктическая задача может быть не самой лучшей.Обычно вы используете асинхронную задачу, потому что вы хотите сделать что-то в фоновом режиме, а затем, когда задача выполнена, обновить некоторые компоненты пользовательского интерфейса с результатом фоновой операции.Здесь, поскольку вы просто хотите что-то в фоновом режиме, но не обновляете пользовательский интерфейс, вам может быть лучше использовать обычный поток:
- заставить ваш класс расширять поток
- изменить startLocation для переопределенияrun
- запускать поток вместо вызова startLocation
- Обновление с подробностями -
Это может быть проще, но идея познакомиться с asyncTask ia более понятна.хороший тоже.
public class LocationFinder extends Thread {
public LocationFinder( Context ctx ) {
this.ctx = ctx;
}
public void start( String userId ) {
this.userId = userId;
super.start();
}
//defensive programming : prevent your thread from beeing started in an undesired way
@Override
public void start() {
throw new IllegalStateException( "LocationFinder can't be started using start(). Prefer start( int )." );
}
public void run() {
//remaining of the code of startLocation except the first line.
}
}
, чтобы использовать вашу ветку, а затем выполнить в упражнении:
new LocationFinder( this ).start( userId );