У меня есть одно Занятие.В этом Упражнении я выполнил AsyncTask , но это не работает
-
21-09-2019 - |
Вопрос
private class ExecuteLocations extends AsyncTask<String, Void, Void>{
private final ProgressDialog dialog = new ProgressDialog(ListProfiles.this);
protected void onPreExecute() {
//this.dialog.setMessage("Starting pre-execute...");
//this.dialog.show();
}
@Override
protected Void doInBackground(String... arg0) {
check_profiles_lm=(LocationManager) ListProfiles.this.getSystemService(LOCATION_SERVICE);
myLocListen = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
HashMap params = new HashMap();
params.put("lat", Double.toString(location.getLatitude()));
params.put("long", Double.toString(location.getLongitude()));
postData("http://mydomain.com",params);
}
@Override
public void onStatusChanged(String provider, int status,Bundle extras) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
};
check_profiles_lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 0, myLocListen);
return null;
}
protected void onPostExecute(final Void unused) {
if (this.dialog.isShowing()) {
//this.dialog.dismiss();
}
//Do something else here
}
}
По сути, моя цель заключается в:
- Постоянно публикуйте данные о широте / долготе на моем веб-сайте каждую минуту или около того.
- Конечно, я хочу сделать это в другом потоке, чтобы это не испортило мой поток пользовательского интерфейса.Эта асинхронная задача должна решить эту проблему ... но она выдает ошибку, и я не знаю почему.
Что вы можете сделать для достижения моей цели?Это очень просто...просто сканируйте местоположение и публикуйте в Интернете каждую минуту в фоновом режиме.
Кстати, мой метод onCreate выглядит следующим образом.Вот, в принципе, и все.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ExecuteLocations().execute();
setContentView(R.layout.main_list);
}
Решение
Разбейте его на 3 этапа:
- Заставьте работать все, что вы хотите, без AsyncTask
- Убедитесь, что вы разобрались с AsyncTask, выполните простой Log.e("хаха", "попался") в
doInBackground(...)
и проверьте, что это показывает - Объедините эти два фактора.
В этом случае я бы, вероятно, выбрал Service
вызванный AlarmManager
.Думаю, последнее вам понадобится в любом случае.
Другие советы
Создайте это как Сервис.Вам не нужно иметь таймер или AlarmManager, когда вы регистрируетесь на события местоположения и действуете соответствующим образом.
Пример прослушивания событий местоположения можно найти по адресу http://code.google.com/p/android-bluetooth-on-motion/source/browse/#svn/trunk/BluetoothOnMotion/src/com/elsewhat
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_NETWORK, MIN_DISTANCE_NETWORK,locationListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_GPS, MIN_DISTANCE_GPS,locationListener);